您的位置:首页 > 其它

POJ 2362

2015-06-11 10:49 288 查看
#include <iostream>
#define MAXN 30
using namespace std;

int _m[MAXN];

bool mark[MAXN];

bool boo;

int st;

int num;
void DFS(int time,int sum,int k);
int main()
{
//freopen("acm.acm","r",stdin);
int test;
int ave;
int i;
int sum;
cin>>test;
while(test --)
{
cin>>num;
sum = 0;
boo = false;
memset(mark,false,sizeof(mark));
for(i = 0; i < num; ++ i)
{
cin>>_m[i];
sum += _m[i];
}

if(sum % 4 != 0)
{
cout<<"no"<<endl;
continue;
}
else
{
st = sum/4;
}

DFS(0,0,0);

if(boo)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}

}

}

void DFS(int time,int sum,int k)
{
if(time == num)
{
return;
}
if(sum > st)
{
return;
}
if(sum == st)
{
if(k + 1 == 3)
{
boo = true;
return;
}
else
{
DFS(0,0,k+1);
}

return;
}
if(!mark[time])
{
mark[time] = true;
DFS(time+1,sum + _m[time],k);
if(boo)
{
return;
}
mark[time] = false;
}
DFS(time + 1,sum,k);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: