P1537 弹珠
#include<bits/stdc++.h>
using namespace std;
const int N=__lg(int(2e4))*2e4;
int a[N],cas;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
while(1){
int sum=0,n=0;
for(int i=1,x;i<=6;i++){
cin>>x,sum+=x*i;//有x件价格为i的
int bit=1;
while(bit<=x){
a[++n]=bit*i,x-=bit,bit*=2;
}
if(x>0){
a[++n]=x*i;
}
}
if(!sum){
return 0;
}
printf("Collection #%d:\n",++cas);
if(sum%2){
cout<<"Can't be divided.\n\n";
continue;
}
int dp[N]={};
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=sum/2;j>=a[i];j--){
dp[j]|=dp[j-a[i]];
}
}
if(dp[sum/2]){
cout<<"Can be divided.\n\n";
}
else{
cout<<"Can't be divided.\n\n";
}
}
}