POJ_2362_Square
2010-07-17 16:43
375 查看
//1011的简化版,TLE了一次,主要是把变量写错了 #include<stdio.h> #include<string.h> //#include<time.h> #include<algorithm> using namespace std; int stick[25],n,sum,end; bool f[25]; int cmp(const void* _a,const void* _b) { int* a=(int *)_a; int* b=(int *)_b; return -(*a-*b); } int dfs(int ti,int p,int next) { if(ti==4) { end=1; return 1; } int i,j,last=-1; for(i=next;i<n;i++) { if(!f[i]&&stick[i]!=last) { last=stick[i]; if(p+stick[i]<sum/4) { f[i]=true; //把i+1写成了next+1,完全没达到剪枝的效果 dfs(ti,p+stick[i],i+1); f[i]=false; } if(p+stick[i]==sum/4) { f[i]=true; dfs(ti+1,0,0); f[i]=false; } if(end) return 1; if(next==0) return 0; } } return 0; } int decide() { end=0; memset(f,0,sizeof(f)); return dfs(0,0,0); } int main() { //freopen("square.txt","r",stdin); //freopen("out.txt","w",stdout); int test; scanf("%d",&test); while(test--) { scanf("%d",&n); int i,j; sum=0; for(i=0;i<n;i++) { scanf("%d",&stick[i]); sum+=stick[i]; } qsort(stick,n,sizeof(stick[1]),cmp); if(sum%4!=0) printf("no/n"); else { if(stick[0]>sum/4) printf("no/n"); else { if(decide()) printf("yes/n"); else printf("no/n"); } } //printf("%f/n",(double)clock()/CLOCKS_PER_SEC); } return 0; }
相关文章推荐
- poj 2362 Square
- poj 2362 Square (dfs+剪枝)
- POJ 2362 Square
- POJ 2362 Square
- POJ 2362 square &&POJ 1011 Sticks 记忆化搜索 DFS
- poj 2362 Square
- DFS POJ 2362 Square
- POJ 2362 Square
- poj 2362 Square(dfs, 剪枝)
- zoj 1909 || poj 2362 Square
- DFS POJ 2362 Square
- poj 2362 Square
- POJ 2362 Square
- POJ 2362 Square
- POJ-2362-Square
- poj 2362 Square 经典深搜
- POJ - 2362 Square
- poj 2362Square(DFS)
- POJ 2362 Square
- POJ 2362 && HDU 1518 Square(dfs)