题目
输出
输出一行,为复习完毕最短的时间。
输入样例
1 2 1 3
5
4 3
6
2 4 3
输出样例
20
思路
01背包问题
代码:
package 搜索;
import java.util.Scanner;
public class P2392 {
public static void main(String[] args) {
int a[]=new int[5];//四个科目
int sum, t=0;
int time[]=new int[30];//每个科目的每道题所消耗的时间
int dp[]=new int[3000];
Scanner sc=new Scanner(System.in);
for (int i = 1; i <= 4; i++) {
a[i]=sc.nextInt();
}
for (int i = 1; i <= 4; i++) {
sum=0;
for (int j = 1; j <= a[i]; j++) {//a[1]=1,a[2]=2,a[3]=1,a[4]=3
time[j]=sc.nextInt();
sum+=time[j];
}
for (int j = 1; j <= a[i]; j++) {
for (int k = sum/2; k >=time[j] ; k--) {
dp[k]=Math.max(dp[k],dp[k-time[j]]+time[j]);//01背包
}
}
t+=sum-dp[sum/2];//累加为另一个脑子
for (int j = 1; j <= sum/2 ; j++) {
dp[j]=0;//清零
}
}
System.out.println(t);
}
}