现在的位置: 首页 > 综合 > 正文

poj 1014 DFS

2013年12月06日 ⁄ 综合 ⁄ 共 758字 ⁄ 字号 评论关闭

突然发现对于程序,其实不小心就将程序给多重的罗嗦啦啊!

#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;
}

 

抱歉!评论已关闭.