前情详见 dfs+search
T1:拔河比赛
拔河比赛两边人数最多不能相差1 。 每个队员都有体重,我们要使两边比赛的人体重和相差最小。 现在有 n 个队员,韩老师想你帮忙分配,并且把分配后两边体重和之差最小值输出。
其实挺暴力的,要把每一种分配方式的体重差都求出来取最小值
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
int T,n,w[100010],s,ans=1e9;
void dfs(int x,int y,int z)//位置 人数 总重
{
if(y==n/2)
{
ans=min(ans,abs(s-z*2));
}
if(x>n)return;
dfs(x+1,y+1,z+w[x]);
dfs(x+1,y,z);
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
s=0;
ans=9999999;
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
s+=w[i];
}
dfs(1,0,0);
printf("%d\n",ans);
}
return 0;
}