// UVa 10482 - The Candyman Can #include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main() { int tt; cin >> tt; for (int t = 1; t <= tt; t++) { int n; cin >> n; int w[33]; int sum = 0; for (int i = 0; i < n; i++) { cin >> w[i]; sum += w[i]; } bool yet[641][641]; memset(yet, true, sizeof(yet)); int gen[409602][2]; int sol = 640; long int m = 1; gen[0][0] = 0; gen[0][1] = 0; for (int i = 0; i < n; i++) { for (long int j = m - 1; j >= 0; j--) { int a = gen[j][0]; int b = gen[j][1]; if (yet[a + w[i]][b]) { yet[a + w[i]][b] = false; gen[m][0] = a + w[i]; gen[m][1] = b; int mn = min(min(gen[m][0], gen[m][1]), sum - gen[m][0] - gen[m][1]); int mx = max(max(gen[m][0], gen[m][1]), sum - gen[m][0] - gen[m][1]); if (mx - mn < sol) sol = mx - mn; m++; } if (yet[a][b + w[i]]) { yet[a][b + w[i]] = false; gen[m][0] = a; gen[m][1] = b + w[i]; int mn = min(min(gen[m][0], gen[m][1]), sum - gen[m][0] - gen[m][1]); int mx = max(max(gen[m][0], gen[m][1]), sum - gen[m][0] - gen[m][1]); if (mx - mn < sol) sol = mx - mn; m++; } } } printf("Case %d: %d\n", t, sol); } return 0; }
Thursday, August 6, 2015
UVa 10482 - The Candyman Can
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment