码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1518 Square

时间:2015-04-08 01:11:02      阅读:112      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!