HDU-1518-square

来源:互联网 发布:java物联网开发技术 编辑:程序博客网 时间:2024/04/20 11:21
#include<iostream>using namespace std;#define max(a,b) (a)>(b)?(a):(b)int a[23],sum,aver,n,maxn;bool b[23],flag;void dfs(int mysum,int count,int j){    if(mysum==aver)    {        count++;        if(count==4)            {                flag=true;                return ;            }        else            mysum=0;            j=0;    }    if(flag) return ;//一旦能围城正方形立即跳出,防止TLE    for(int i=j;i<n;i++)        if(!b[i]&&mysum+a[i]<=aver)        {            b[i]=true;            dfs(mysum+a[i],count,i);            b[i]=false;        }}int main(){    int k,i;    cin>>k;    while(k--)    {      cin>>n;        sum=0;        maxn=0;        flag=false;        for(i=0;i<n;i++)            {                cin>>a[i];                maxn=max(maxn,a[i]);                sum+=a[i];            }        aver=sum/4;        if(sum%4!=0||maxn>aver)//简单判断能不能围成一个正方形          {  flag=false;}        else            dfs(0,0,0);        if(flag)            cout<<"yes"<<endl;        else            cout<<"no"<<endl;    }        return 0;}

原创粉丝点击