POJ 1014

//复杂度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;
} 

  

posted on 2016-08-05 20:29  SijingLin  阅读(92)  评论(0编辑  收藏  举报

导航