//复杂度n5,降1次就过了哈哈哈哈哈,看来没有其他简单的方法了lol #include<stdio.h> #include<iostream> using namespace std; bool check(int *a,int half){ for(int n1=0;n1<=a[1];n1++) for(int n2=0;n2<=a[2];n2++) for(int n3=0;n3<=a[3];n3++) for(int n4=0;n4<=a[4];n4++) for(int n5=0;n5<=a[5];n5++){ int tmp=(half-(n1*1+n2*2+n3*3+n4*4+n5*5)); /*cout<<n1<<‘ ‘<<n2<<‘ ‘<<n3<<‘ ‘<<n4<<‘ ‘<<n5<<"tmp"<<tmp<<endl;*/ if(tmp%6==0&&tmp>=0&&tmp/6<=a[6]) return true; } return false; } int main(){ int a[7]; int t=1; while(scanf("%d%d%d%d%d%d",a+1,a+2,a+3,a+4,a+5,a+6)&&(a[1]!=0||a[2]!=0||a[3]!=0||a[4]!=0||a[5]!=0||a[6]!=0)){ int sum=0; for(int i=1;i<=6;i++) sum+=i*a[i]; if(sum%2!=0||!check(a,sum/2)) printf("Collection #%d:\nCan‘t be divided.\n\n",t++); else printf("Collection #%d:\nCan be divided.\n\n",t++); } return 0; }
原文:http://www.cnblogs.com/lsj2020/p/5742714.html