P2383 狗哥玩木棒

· · 个人记录

#include<bits/stdc++.h>
using namespace std;
int a[25];
bool f=0;
int len;
void node(int sum1,int sum2,int sum3,int sum4,int zxc){
    if(f==1){
        return ;
    }
    if(sum1>len || sum2>len || sum3>len || sum4>len){
        return ;
    }
    if(sum1==len && sum2==len && sum3==len && sum4==len){
        f=1;
        return ;
    }
    node(sum1+a[zxc],sum2,sum3,sum4,zxc+1);
    node(sum1,sum2+a[zxc],sum3,sum4,zxc+1);
    node(sum1,sum2,sum3+a[zxc],sum4,zxc+1);
    node(sum1,sum2,sum3,sum4+a[zxc],zxc+1);
}
int ans=0;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int m;
        cin>>m;
        ans = 0;
        for(int j=1;j<=m;j++){
            cin>>a[j];
            ans+=a[j];
        }
        if(ans%4!=0){
            cout<<"no"<<endl;
        }
        else{
            len=ans/4;
            node(0,0,0,0,1);
            if(f==0){
                cout<<"no"<<endl;
            }
            if(f==1){
                cout<<"yes"<<endl;
            }
            f=0;
        }
    }
}