读书人

Dividing 03多重背包有关问题

发布时间: 2013-01-25 15:55:29 作者: rapoo

Dividing 03多重背包问题

http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?pid=1005&ojid=0&cid=3900Dividing Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 8 Accepted Submission(s) : 2Problem DescriptionInputOutputSample InputSample Output#include<cstdio>#include<cstring>using namespace std;int dp[60500];int main(){ int n[7]; int v[7]; int sum=0; int test=1; while(scanf("%d",&n[1])!=EOF) { memset(dp,0,sizeof(dp)); int sum=n[1]; int t; for(int i=2; i<=6; i++) { scanf("%d",&t); n[i]=t%10; sum+=i*n[i]; } if(n[1]==0&&n[2]==0&&n[3]==0&&n[4]==0&&n[5]==0&&n[6]==0) break; if(sum%2==1) { printf("Collection #%d:\nCan't be divided.\n\n",test); test++; continue; } for(int i=1; i<=6; i++) v[i]=i; int V=sum/2; dp[0]=1; for(int i=1; i<=6; i++) { for(int j=0; j<n[i]; j++) { for(int k=V; k>=v[i]; k--) { if(dp[k-v[i]]) dp[k]=1; } } } // for(int i=V;i>=0;i--) //printf("%d %d\n",dp[i],i); if(dp[V]==1) { printf("Collection #%d:\nCan be divided.\n\n",test); test++; } else { printf("Collection #%d:\nCan't be divided.\n\n",test); test++; } } return 0;}


读书人网 >编程

热点推荐