hoj1956 square
2012-01-31 17:33
309 查看
http://acm.hit.edu.cn/hoj/problem/view?id=1956
深搜+剪枝,与hoj 1049相似,此题固定了 筷子的长度和筷子的条数为4
深搜+剪枝,与hoj 1049相似,此题固定了 筷子的长度和筷子的条数为4
/*This Code is Submitted by billforum for Problem 1956 at 2012-01-31 17:30:00*/ #include <iostream> #include <algorithm> using namespace std; struct point { int num; int next; }; point data[100]; bool visit[100]; int total,len,n; bool cmp(point x,point y) { return (x.num>y.num); } bool dfs(int res,int next,int cpl) { if(res==len) { res=0; cpl++; next=1; } if(cpl==total) return true; int i=next; while(i<n) { if(visit[i]) { i++; continue; }//if if(data[i].num+res<=len) { visit[i]=1; if(dfs(data[i].num+res,i+1,cpl)) return true; visit[i]=0;// if(res==0) break;//剪枝 if(res+data[i].num==len) break;//剪枝 i=data[i].next; continue; }//if i++; }//while return false; } int main(int args,char** argv) { int ind,id,sum,test,flag; cin>>test; while(test--) { sum=0; flag=0; cin>>n; for(int i=0;i<n;i++) { cin>>ind; data[i].num=ind; sum+=ind; visit[i]=0; } sort(data,data+n,cmp); id=0; while(id<n) { int j=id+1; while((data[j].num==data[id].num)&&j<n) j++;//j?=n for(int i=id;i<j;i++) data[i].next=j; id=j; }//while if(sum%4==0) { len=sum/4; total=4; if(dfs(0,0,0)) flag=1; } if(flag==0) cout<<"no"<<endl; else cout<<"yes"<<endl; }//while return 0; }
相关文章推荐
- HOJ 1956 Square(DFS+剪枝)
- Square DFS poj&hoj
- [英语阅读]Hanover Square 追忆似水年华
- pku2362 Square(又是TLE.....................)
- foursquare.com
- HOJ(哈工大) 2816
- Maze Stretching--HOJ 11879
- HOJ 1011 Unix ls
- [递归理解/记忆化] HDU/HOJ 1331 Function Run Fun
- Square= =……拼正方形
- 【个人专题一】强连通——Hoj_3639(RE)
- joj 2620: Count Square 状态压缩DP N*M的0,1方格,每一个2*2的小方格有一个价值,求整个方格的最大价值
- “三合一”Web应用App.bg:Instagram + Foursquare + Twitter
- hoj 1225 Supermarket
- hoj题双重筛法
- hoj 1640 Mobile phones //poj 1195 Mobile phones 二维树状数组
- 移动支付“钱景”无限,Square估值40亿美刀
- hoj 1520 The Bottom of a Graph // poj 2553 The Bottom of a Graph
- hoj Count on Canton
- hoj 3043 mysterious