方法在题中
#include<bits/stdc++.h>
using namespace std;
long long a[105],b[105],s,h,t;
void f(long long x,long long j,long long n){//x是一只脑子的时间 j是题目号码 n是题目总数
if(j>n){//当题都分配完时
t=max(x,a[n+1]-x);//t是两只脑子求最大耗时
h=min(t,h);//求各个t的最小量
return;
}
f(x+a[j],j+1,n);//选择用这只脑子做
f(x,j+1,n);//不选择用这只脑子做
}
int main()
{
long long i,j;
cin>>b[1]>>b[2]>>b[3]>>b[4];//分别为四科题量
for(j=1;j<=4;j++){
for(i=1;i<=b[j];i++) cin>>a[i],a[ b[j]+1 ]+=a[i];//存储,a[ b[i]+1 ]为总和;
h=1e9;//方便第7行 求最小时间
f(0,1,b[j]);
s+=h;//单科总时间
for(i=1;i<=b[j]+1;i++) a[i]=0;//清空a[]
}
cout<<s;
return 0;
}