【Ybtoj 第4章 例题1】拔河比赛【深搜】

【Ybtoj 第4章 例题1】拔河比赛【深搜】_第1张图片
【Ybtoj 第4章 例题1】拔河比赛【深搜】_第2张图片
在这里插入图片描述
【Ybtoj 第4章 例题1】拔河比赛【深搜】_第3张图片
在这里插入图片描述


解题思路

这是一个很简单的深搜。

依题意得每组最多 n 2 \frac{n}{2} 2n 个人,对于每个人无非有选和不选两种情况。
累计选的总和,用全部人的总和去减就得出了另一对的重量,取绝对值即可。


代码

#include
#include
#include
#include
using namespace std;

int t,n,a[50],lyx,ans;

void dfs(int dep,int x,int s){
	if(x==n/2)
	{
		ans=min(ans,abs(lyx-s*2));
		return;
	}
	if(dep>n)return;
	dfs(dep+1,x+1,s+a[dep]);
	dfs(dep+1,x,s);
}
int main(){
	scanf("%d",&t);
	while(t--)
	{
		ans=2147483600; 
		lyx=0;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
			lyx+=a[i];
		}
		dfs(1,0,0);
		printf("%d\n",ans);
	}
	
} 

你可能感兴趣的:(Ybtoj)