sample input:
20000 20000 20000 20000 30000 20000
0 0 0 0 0 0
sample output:
Collection #1:
Can't be divided.
我大号的代码(AC):
#include <bits/stdc++.h>
using namespace std;
int dp[2323233], w[2322333];
signed main() {
int a, b, c, d, e, f, ca = 1;
while (cin >> a >> b >> c >> d >> e >> f, a || b || c || d || e || f) {
int cnt = 0;
for (int i = 1; i <= a; i ++)
w[++ cnt] = 1;
for (int i = 1; i <= b; i ++)
w[++ cnt] = 2;
for (int i = 1; i <= c; i ++)
w[++ cnt] = 3;
for (int i = 1; i <= d; i ++)
w[++ cnt] = 4;
for (int i = 1; i <= e; i ++)
w[++ cnt] = 5;
for (int i = 1; i <= f; i ++)
w[++ cnt] = 6;
int sum = 1 * a + 2 * b + 3 * c + 4 * d + 5 * e + 6 * f;
for (int i = 0; i <= sum; i ++)
dp[i] = 0;
dp[0] = 1;
for (int i = 1; i <= cnt; i ++)
for (int j = sum; j; j --)
if (j - w[i] >= 0)
if (dp[j - w[i]])
dp[j] = 1;
bool flag = false;
for (int i = 0; i <= sum; i ++)
if (dp[i]) {
int ans = 2 * i - sum;
if (ans == 0) {
flag = true;
break;
}
}
cout << "Collection #" << ca ++ << ":\n";
if (flag)
cout << "Can be divided.\n\n";
else
cout << "Can't be divided.\n\n";
}
return 0;
}
好多题解都TLE了。
O(n2) 在元数据下可过,这组数据Hack TLE