#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int c[60066], a[7];
void Zero_One(int cost, int weight, int m) {
for (int i = m; i >= cost; --i)
c[i] = max(c[i], c[i - cost] + weight);
}
void Complete(int cost, int weight, int m) {
for (int i = cost; i <= m; ++i)
c[i] = max(c[i], c[i - cost] + weight);
}
void Divite(int n) {
int i, k, t;
memset(c, 0, sizeof(c));
for (i = 1; i <= 6; ++i) {
t = i * a[i];
if (t > n) {
Complete(i, i, n);
} else {
k = 1;
while (k < a[i]) {
Zero_One(k * i, k * i, n);
a[i] -= k;
k <<= 1;
}
Zero_One(a[i] * i, a[i] * i, n);
}
}
}
int main(int argc, char **argv) {
// freopen("input.txt","r",stdin);
int T = 1;
int i, sum;
while (true) {
for (i = 1, sum = 0; i <= 6; ++i) {
cin >> a[i];
sum += a[i] * i;
}
if (!sum)
break;
cout << "Collection #" << T << ":" << endl;
if (sum % 2 == 1){
cout << "Can't be divided." << endl<<endl;
}
else {
sum >>= 1;
Divite(sum);
if (c[sum] == sum)
cout << "Can be divided." << endl<<endl;
else
cout << "Can't be divided." << endl<<endl;
}
++T;
}
return 0;
}
hdu 1059
最新推荐文章于 2019-12-18 21:58:24 发布