POJ2362 Square

来源:互联网 发布:木地板推荐 知乎 编辑:程序博客网 时间:2024/05/19 13:07

这题跟POJ1011题很像,但感觉比这题简单些。

#include<stdio.h>#include<stdlib.h>#include<string.h>int a[10000],sum,m;bool vis[10000];int cmp(const void *a,const void *b){return *(int*)a-*(int*)b;}bool dfs(int count,int s,int cur,int xu){if(count==4)return true;int ok=-1;for(int i=cur;i<m;i++){ if(!vis[i]&&ok!=a[i]){if(s+a[i]<xu){vis[i]=1;if(dfs(count,s+a[i],i+1,xu))return true;vis[i]=0;ok=a[i];}else if(s+a[i]==xu){vis[i]=1;if(dfs(count+1,0,0,xu))return true;vis[i]=0;ok=a[i];}if(s==0)break;}}return false;}int main(){//freopen("t.txt","r",stdin);int T,i;scanf("%d",&T);while(T--){scanf("%d",&m);memset(vis,0,sizeof(vis));sum=0;for(i=0;i<m;i++){scanf("%d",&a[i]);sum+=a[i];}if(sum%4==0){sum/=4;qsort(a,m,sizeof(a[0]),cmp);if(dfs(0,0,0,sum))printf("yes\n");else printf("no\n");}else printf("no\n");}return 0;}


0 0
原创粉丝点击