现在的位置: 首页 > 综合 > 正文

hdu 1518

2012年09月18日 ⁄ 综合 ⁄ 共 619字 ⁄ 字号 评论关闭
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,cnt,sum;
int a[200];
bool vis[200];
bool flag;
int ttt;
void dfs(int s,int tt)
{
    int i;
    if(s==ttt)
    {
        if(cnt==3)
        {
            flag=true;
            return ;
        }
        else
        {
            cnt++;
            dfs(0,0);//cant s=0 then loop directly
            cnt--;// important
        }
    }
    if(tt>=n || flag)
        return ;
    for(i=tt;i<n;i++)
    {
        if(s+a[i]<=ttt && !vis[i])
        {
            vis[i]=true;
            dfs(s+a[i],i+1);
            vis[i]=false;
        }
    }
}
int main()
{
    int t,i;
    scanf("%d",&t);
    while(t--)
    {
        memset(vis,0,sizeof(vis));
        sum=0;
        cnt=0;
        flag=false;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        if(sum%4)
        {
            printf("no\n");
            continue;
        }
        ttt=sum/4;
        dfs(0,0);
        if(flag)
            printf("yes\n");
        else
            printf("no\n");
    }
    return 0;
}

抱歉!评论已关闭.