hdu 1518 Square

来源:互联网 发布:视频后期调色软件 编辑:程序博客网 时间:2024/06/11 18:22

关键在于优化剪枝

#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

0 0