分析:
本题可以用动态规划dp做,但是因为数据量小,我们这里使用dfs进行穷举。
基本思路就是递归加回溯来穷举。
我们有四组数据,我们只要能处理一组,剩下的都是照样处理就行了。
我们穷举的内容:
因为是尽快完事,还能一次做两个。
我们可以穷举出怎么样分可以使两组数据的差最小。
然后左右脑中大的那个值就是答案;
也就是说我们要求分两组数据,两数数据和的差尽量小的情况下他们中大的数据要最小。
这样就是最快的了。
用一个left和right来分别纪录左右脑耗费的时间。
#include<stdio.h>
int s[4];
int l,r;
int min;
int data[100][100];
void dfs(int x,int y){
//printf("%d %d\n",l,r);
if(x>=s[y]){min=(min<(l>r?l:r)?min:(l>r?l:r));return;}
l+=data[y][x];
dfs(x+1,y);
l-=data[y][x];
r+=data[y][x];
dfs(x+1,y);
r-=data[y][x];
}
main()
{
int ans=0;
for(int i=0;i<4;i++)
{
scanf("%d",s+i);
}
for(int i=0;i<4;i++)
{
for(int j=0;j<s[i];j++)
{
scanf("%d",data[i]+j);
}
l=r=0;
min=9999999;
dfs(0,i);
ans+=min;
}
printf("%d",ans);
}