您的位置:首页 > 其它

hdu 1518 Square

2015-04-07 23:31 246 查看
关键在于优化剪枝

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


hint:这题的数据增强过,上面的代码已经不能AC了(抱歉今天才发现) 2015/11/9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: