题目链接:here~~
这道题和zb的生日所求的一样,只不过把时间限制3秒改为了一秒,所以这题就不能用深度搜索做了,当然,也可以深度搜索加优化做,还是比较麻烦的,所以就用动态规划做,仔细想一下,这道题是0-1背包的题,将题目条件转化为用容量为total/2(total是所有邮票价值的总和)的背包装最多的邮票,接下来就不用说了吧!
# include <stdio.h>
# include <string.h>
int res[100010], a[1010];
int main()
{
int n, m, i, j, t, total;
// freopen("in.txt", "r", stdin);
scanf("%d", &n);
while (n--)
{
memset(res, 0, sizeof(res));
scanf("%d", &m);
total=0;
for (i = 1; i<=m; i++)
{
scanf("%d", &a[i]);
total+=a[i];
}
for (i = 1; i<=m; i++)
{
for (j = total/2; j>=a[i]; j--)
{
if (res[j]<res[j-a[i]]+a[i])
res[j]=res[j-a[i]]+a[i];
}
}
printf("%d\n", total-2*res[total/2]);
}
return 0;
}