// 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