HDU 1518 Square

来源:互联网 发布:淘宝上的装修公司 编辑:程序博客网 时间:2024/04/29 13:53
解题思路:sum%4!=0    , max<sum/4


#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;int a[100];bool vis[100],flag;int m,ave;bool dfs(int ans,int sum,int cnt){    if(sum==ave) return true;    for(int i=cnt;i<m;i++){      if(a[i]==a[i-1]&&!vis[i-1]) continue;      if(!vis[i]&&a[i]<=ans){ //shit !!!  <          vis[i]=true;        if(a[i]==ans){          if(dfs(ave,sum-a[i],0))           return true;        }        else if(dfs(ans-a[i],sum-a[i],i))          return true;        vis[i]=false;        if(ans==ave) return false;        }      }      return false;}int main(){    int n,sum;    scanf("%d",&n);    while(n--){      scanf("%d",&m);      sum=0;      for(int i=0;i<m;i++){        scanf("%d",&a[i]);        sum+=a[i];      }      sort(a,a+m);      flag=false;      ave=sum/4;      if(a[m-1]>ave||sum%4!=0){        cout<<"no"<<endl;        continue;      }      else{        memset(vis,false,sizeof(vis));        if(dfs(ave,sum,0))        flag=true;      }      if(flag) cout<<"yes"<<endl;      else cout<<"no"<<endl;    }    return 0;}
原创粉丝点击