一个简单的dfs,搜索的层数为题目数
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int maxn, ans, sum;
int s[5], a[25];
void dfs(int time, int cengshu, int i)
{
if(cengshu > s[i])
{
maxn = max(maxn, time);
return ;
}
if(time + a[cengshu] <= sum / 2)
dfs(time + a[cengshu], cengshu + 1, i);
dfs(time, cengshu + 1, i);
return ;
}
int main()
{
scanf("%d%d%d%d", &s[1], &s[2], &s[3], &s[4]);
for(int i = 1; i <= 4; i ++)
{
maxn = -1;
sum = 0;
memset(a, 0, sizeof(a));
for(int j = 1; j <= s[i]; j ++)
{
scanf("%d", &a[j]);
sum += a[j];
}
dfs(0, 1, i);
ans += (sum - maxn);
}
printf("%d\n", ans);
return 0;
}