https://www.luogu.com.cn/problem/P2392
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e4+10;
const int inf=0x3f3f3f3f;
int dp[maxn],t[maxn];
int f(int n){
int sum=0;
for(int i=1;i<=n;i++) cin>>t[i],sum+=t[i];
memset(dp,0,sizeof(dp));
//一共俩种状态,要么加左脑上,要么加右脑上
//时间是体积,也是价值的0-1背包,体积为m/2(m为时间总和)
//为什么体积为m/2?因为左右脑都为m/2时候,时间利用路最高,差值为0
dp[0]=0;
for(int i=1;i<=n;i++)
for(int j=sum;j>=t[i];j--)
dp[j]=max(dp[j],dp[j-t[i]]+t[i]);
return max(dp[sum/2],sum-dp[sum/2]);
}
int main(){
int s1,s2,s3,s4;
cin>>s1>>s2>>s3>>s4;
cout<<f(s1)+f(s2)+f(s3)+f(s4);
}