题目:
这题可以运用dfs ,将每一种情况分给左右脑遍历一遍,最后取最小值即可。
#include<bits/stdc++.h>
using namespace std;
int flag1,flag2,minn,ans;
int s[5];
int a[21][5];
void dfs(int x,int y)
{
if(x>s[y])
{
minn=min(minn,max(flag1,flag2));
return;
}
flag1+=a[x][y];
dfs(x+1,y);
flag1-=a[x][y];
flag2+=a[x][y];
dfs(x+1,y);
flag2-=a[x][y];
}
int main()
{
scanf("%d %d %d %d",&s[1],&s[2],&s[3],&s[4]);
for(int i=1;i<=4;i++)
{
flag1=flag2=0;
minn=19260817;
for(int j=1;j<=s[i];j++)
scanf("%d",&a[j][i]);
dfs(1,i);
ans+=minn;
}
printf("%d\n",ans);
return 0;
}
明天必须要“好好”学习!