!!!!!再一次被粗心给坑惨了。。无语了啊,DEBUG了我一个小时,最后错误竟然是因为了少加了换行符。。。我日了,搞这么长的输出You'd better buy another one! 我直接复制进来就没管了。。好坑啊T T 题目本身还是挺简单的,不过还有更优化的方法,我的函数重复计算略多。。不多说了,都是泪
#include<stdio.h>
static int m, n, t, c[7][7], p[7], min;
int nutrition_diff()
{
int i, j, left = 0, right = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < p[i]; j++)
left += c[i][j];
for (j = p[i]; j < n; j++)
right += c[i][j];
}
return left > right ? left - right : right - left;
}
void dfs3158(int depth)
{
if (depth == m)
{
int diff = nutrition_diff();
if (diff < min)
min = diff;
return;
}
int i;
for (i = 1; i < n; i++)
{
p[depth++] = i;
dfs3158(depth);
depth--;
}
}
int main()
{
while (scanf("%d %d", &m, &n) != EOF)
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%d", &c[i][j]);
scanf("%d", &t);
min = 0x7FFFFFFF;
dfs3158(0);
if (min <= t)
printf("%d\n", min);
else
printf("You'd better buy another one!\n");
}
return 0;
}