#include <bits/stdc++.h>
using namespace std;
#define ll long long
int arr1[23],arr2[23],arr3[23],arr4[23];
int dp1[100],dp2[100],dp3[100],dp4[100];
int time(int sum,int* piont,int num,int* dp){
for(int i=1;i<=num;i++){
for(int j=sum;j>=piont[i];j--) {
dp[j] = max(dp[j], dp[j - piont[i]] + piont[i]);
}
}
return dp[sum];
}
int main() {
int a1=0,a2=0,a3=0,a4=0,sum1=0,sum2=0,sum3=0,sum4=0;
int sum_time=0;
scanf("%d%d%d%d",&a1,&a2,&a3,&a4);
for(int i=1;i<=a1;i++){
scanf("%d",arr1+i);
sum1+=arr1[i];
}
for(int i=1;i<=a2;i++){
scanf("%d",arr2+i);
sum2+=arr2[i];
}
for(int i=1;i<=a3;i++){
scanf("%d",arr3+i);
sum3+=arr3[i];
}
for(int i=1;i<=a4;i++){
scanf("%d",arr4+i);
sum4+=arr4[i];
}
int t1=time(sum1/2,arr1,a1,dp1);
int t2=time(sum2/2,arr2,a2,dp2);
int t3=time(sum3/2,arr3,a3,dp3);
int t4=time(sum4/2,arr4,a4,dp4);
sum_time=(sum1+sum2+sum3+sum4)-(t1+t2+t3+t4);
cout<<sum_time;
return 0;
}
用的是01背包,让每个科目的时间接近单科目的1/2总时间,求大牛帮忙看一看