P1833 樱花 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
何为混合,混合也就是混合了01背包,多重背包,完全背包的混合体。通过判断物品的件数,如果是1件就是01背包,无限量就是完全背包的算法,有限件就是多重背包的算法。上模板
import java.awt.FontFormatException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.AnnotatedWildcardType;
import java.math.BigInteger;
import java.net.DatagramPacket;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Spliterator.OfPrimitive;
import java.util.function.IntToDoubleFunction;
import java.util.function.LongBinaryOperator;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.management.relation.InvalidRelationTypeException;
import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.JobPriority;
import javax.swing.table.TableModel;
import javax.swing.text.TabSet;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw1=new PrintWriter(System.out);
String aaa1=br1.readLine();
String[] bbb1=aaa1.split(" ");
String aString=bbb1[0];
String bString=bbb1[1];
int n=Integer.parseInt(bbb1[2]);
//System.out.println(aString+" "+bString+" "+n);
String[] aStrings=aString.split(":");
String[] bStrings=bString.split(":");
int a=(Integer.parseInt(aStrings[0])*60)+Integer.parseInt(aStrings[1]);
int b=(Integer.parseInt(bStrings[0])*60)+Integer.parseInt(bStrings[1]);
int c=b-a;
//System.out.println(c);
int[] dp=new int[c+1];
int d;
int x,y;
for(d=1;d<=n;d++) {
String cString=br1.readLine();
//System.out.println(cString+" "+d);
String[] cStrings=cString.split(" ");
int e=Integer.parseInt(cStrings[0]);
int f=Integer.parseInt(cStrings[1]);
int g=Integer.parseInt(cStrings[2]);
//System.out.println(e+" "+f+" "+g);
if(g==1) {
for(y=c;y>=e;y--) {
dp[y]=Math.max(dp[y], dp[y-e]+f);
}
}
else if(g==0) {
for(y=e;y<=c;y++) {
dp[y]=Math.max(dp[y], dp[y-e]+f);
}
}
else {
int a1=Math.min(g, c/e);
for(int k=1;a1>0;k=k*2) {
if(k>a1) {
k=a1;
}
a1=a1-k;
for(y=c;y>=k*e;y--) {
dp[y]=Math.max(dp[y], dp[y-e*k]+f*k);
}
}
}
}
System.out.println(dp[c]);
}
}