UVa 562 Dividing coins

用half替代sum>>1后通过了,不明原因。

 1 /* 562 - Dividing coins */
2 # include <stdio.h>
3 # include <memory.h>
4
5 int v[105];
6 int f[50050/2];
7
8 int main()
9 {
10 int n, m, i, sum, j, half;
11
12 scanf("%d", &n);
13 while (n--)
14 {
15 scanf("%d", &m);
16 for (sum = 0, i = 1; i <= m; ++i)
17 {
18 scanf("%d", &v[i]);
19 sum += v[i];
20 }
21 half = sum / 2;
22 for (i = 1; i <= m; ++i) /* m步决策, 最大容量为sum */
23 for (j = half; j >= v[i]; --j)
24 if (f[j] < f[j-v[i]]+v[i])
25 f[j] = f[j-v[i]] + v[i];
26
27 printf("%d\n", sum-f[half]*2);
28 memset(f, 0, sizeof(f));
29 }
30
31 return 0;
32 }
原文地址:https://www.cnblogs.com/JMDWQ/p/2430713.html