拔河比赛
【问题描述】 熊出没之探险日记,讲述了夏季休林季,光头强变身成为一名导游,并与熊大熊二一起, 帮助小女孩赵琳去往森林深处找寻儿时玩伴东北虎的故事。 某一天,他们准备进行拔河比赛,森林里很多动物都想来报名参加。经过投票,他们最 终选出了光头强,赵琳,熊大,熊二,吉吉,毛毛。由于不同动物和人的力量明显是不一样 的,所以这个拔河比赛可能会很不公平。于是他们想每 3 个分成一组,并对每位选手的力量 值做一个适当的估计,力量估计值都是一个正整数。 拔河比赛马上就要开始了,请你根据给出的力量值来判断是否可以分成两组,每组 3 位选手,同时要求每组的力量值总和相等。
输入格式:
第一行是一个正整数 T,表示共计有 T 组数据需要判定。接下对于每组数据, 都是 6 个正整数,表示每位选手的实力,每组数据占一行。
输出格式:
对于每组数据,如果可以分成实力相同的两个队伍,就输出 yes,否则就输出 no,每个 输出占一行。
输入样例1:
1
1 3 2 1 2 1
输出样例1:
yes
输入样例2
2
1 1 1 1 1 99
1 1 1 1 1 1
输出样例2:
no
yes
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[7],vis[7],flag=0,j;
void dfs(int k,int len,int sum,int ans){
if(len==3){
if(sum==ans)
flag=1;
return ;
}
else{
for(int i=k;i<=6;i++){
if(!vis[i]){
vis[i]=1;
dfs(k+1,len+1,sum+a[i],ans-a[i]);
vis[i]=0;
}
}
}
}
int main ()
{
scanf("%d",&n);
while(n--){
int ans=0;
flag=0;
memset(vis,0,sizeof(vis));
memset(a,0,sizeof(a));
for(int i=1;i<=6;i++){
scanf("%d",&a[i]);
ans+=a[i];
}
dfs(1,0,0,ans);
if(flag)
printf("yes\n");
else
printf("no\n");
}
return 0;
}