分析:
对于每一行,有m份,由于不能切出为0的情况,所以。又m-1中情况。并且有n行,由于数据弱,所以暴力枚举。dfs就可以了。。。
#include"stdio.h"
#include"string.h"
int map[8][8];
int max,sum1,sum2;
int n,m;
void dfs(int i,int j,int left,int right)
{
int sum,k,l;
if(i==n)
{
sum=0;
if(right-left>0)sum=right-left;
else sum=left-right;
if(sum<max||max==-1)
max=sum;
return ;
}
int tleft,tright;
for(k=1;k<m;k++)
{
tleft=tright=0;
for(l=0;l<k;l++)
tleft+=map[i][l];
for(l=k;l<m;l++)
tright+=map[i][l];
dfs(i+1,k,left+tleft,right+tright);
}
}
int main()
{
int i,j,t;
int left,right;
while(scanf("%d%d",&n,&m)!=-1)
{
max=-1;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
scanf("%d",&map[i][j]);
}
scanf("%d",&t);
for(i=1;i<m;i++)
{
left=right=0;
for(j=0;j<i;j++)
left+=map[0][j];
for(j=i;j<m;j++)
right+=map[0][j];
dfs(1,i,left,right);
}
if(max<=t&&n!=1&&max!=-1)printf("%d\n",max);
else printf("You'd better buy another one!\n");
}
return 0;
}