首页 > 其他 > 详细

hdu 1518 Square

时间:2015-04-08 01:09:25      阅读:273      评论:0      收藏:0      [点我收藏+]

关键在于优化剪枝

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int mapp[20+5],visit[20+5];
int flag;
int l,m;
void dfs(int s,int x,int num)
{
	visit[s]=1;
	if(x==l) num++,s=0,x=0;
	if(num==4)
	{
		flag=1;return;
	}
	if(flag) return;
	for(int i=s+1;i<m;i++)//每次都从0开始跑会超时 
	{
		if(!visit[i]&&x+mapp[i]<=l) dfs(i,x+mapp[i],num),visit[i]=0;
	}
	
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		cin>>m;
		int sum=0;
		for(int i=0;i<m;i++) scanf("%d",&mapp[i]),sum+=mapp[i];
		sort(mapp,mapp+m);
		if(sum%4!=0||m<4||mapp[m-1]>sum/4)
		{
			cout<<"no"<<endl;
			continue;
		}
		l=sum/4;
		memset(visit,0,sizeof(visit));
		flag=0;
		dfs(0,mapp[0],0);
		if(flag) cout<<"yes";
		else cout<<"no";
		cout<<endl;
	}
	return 0;
} 


hdu 1518 Square

原文:http://blog.csdn.net/zafkiel_nightmare/article/details/44928447

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!