突然发现对于程序,其实不小心就将程序给多重的罗嗦啦啊!
#include<iostream> using namespace std; int sum,a[7],sign; //bool vis[120005]; void sou(int i,int n) { int j; if(n==0)//已经结束了 sign=1; if(sign==1) return ; for(j=i; j>=1; j--) { if(a[j]==0) continue; if(n>=j) { a[j]--; sou(j,n-j); if(sign==1) return; // a[j]++;一个重要的剪枝的,不能加上去的,不然就超时了! } } return ; } int main() { int i,t=0; while(scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6])) { t++; if(a[1]==0 && a[2]==0 && a[3]==0 && a[4]==0 && a[5]==0 && a[6]==0) break; sum=0; for(i=1; i<=6; i++) // while(a[i]!=0) // { // vis[j]=false; // s[j++]=i; sum+=i*a[i]; // } sign=0; if(sum%2!=0) printf("Collection #%d:\nCan't be divided.\n",t); else { // for(i=1; i<=6; i++) // { sou(6,sum/2); // } if(sign==1) printf("Collection #%d:\nCan be divided.\n",t); else printf("Collection #%d:\nCan't be divided.\n",t); } printf("\n"); } return 0; }