#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<math.h> #include<stdlib.h> using namespace std; #define INF 0xfffffff #define N 20 int flag,mid,a[N]; void Find(int ans,int s) { if(flag) return; if(ans==mid) { flag=1; return; } for(int i=s; i>=1; i--) { if(a[i]) { if(ans+i<=mid) { a[i]--; Find(ans+i,i); if(flag) break; } } } return; } int main() { int t=1; while(1) { int sum=0; for(int i=1; i<=6; i++) { scanf("%d",&a[i]); sum+=a[i]*i; } if(sum==0) break; printf("Collection #%d:\n",t++); if(sum%2==1) { printf("Can‘t be divided.\n\n"); continue; } flag=0; mid=sum/2; Find(0,6); if(flag==1) printf("Can be divided.\n\n"); else printf("Can‘t be divided.\n\n"); } return 0; }
原文:http://www.cnblogs.com/linliu/p/5138509.html