80分代码求调(急
查看原帖
80分代码求调(急
1056514
zky2023楼主2024/10/5 15:16
//P2383 狗哥玩木棒
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=1e4+100;
int T,n,a[N],l[5];
bool flag=false;
inline bool check()
{
    for(int i=1;i<n;i++)
    {
        if(a[i]!=a[i+1])
        {
            return false;
        }
    }
    return true;
}
inline void dfs(int point)
{
    if(flag==true)
    {
        return ;
    }
    if(point==n+1)
    {
        flag=true;
        return ;
    }
    for(int i=1;i<=4;i++)
    {
        if(l[i]>=a[point])
        {
            l[i]-=a[point];
            dfs(point+1);
            l[i]+=a[point];
        }
    }
}
inline void work()
{
    memset(a,0,sizeof(a));scanf("%d",&n);int c=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",a+i);c+=a[i];
    }
    if(c%4!=0)
    {
        printf("no\n");
        return ;
    }
    if(check()==true)
    {
        if(n%4!=0)
        {
            printf("no\n");
            return ;
        }
    }
    for(int i=1;i<=4;i++)
    {
        l[i]=c/4;
    }
    sort(a+1,a+n+1,greater<int>());
    dfs(1);
    if(flag==true)
    {
        printf("yes\n");
        return ;
    }
    else
    {
        printf("no\n");
        return ;
    }
}
signed main(void)
{
    scanf("%d",&T);
    while(T--)
    {
        work();
    }
    return 0;
}
2024/10/5 15:16
加载中...