题目描述
在未来号办公室,老师们平时集训脑力劳动力比较重。为了劳逸结合,我们敬爱的梁老师准备了一场拔河比赛,让老师们放松心情。
为了拔河比赛的公正性,梁老师提出以下要求:
1、 拔河比赛两边人数最多不能相差1。
2、每个队员都有体重,我们要使两边比赛的人体重和相差最小。
现在有N个队员,梁老师想你帮忙分配,并且把分配后两边体重和之差最小值输出。
输入
首先输入人数 N ,占一行。
后面跟着 N个数,表示 N个人的体重 W1− Wn。
2<=N<=20,1<=Wi<=200。
输出
一个整数表示两边体重之差的绝对值。
样例输入
3 55 50 100
样例输出
5
提示
来源
#include<bits/stdc++.h>
using namespace std;
bool h[1000],mp[1000];int a[21],n,ans,s=0x3ffffff;
void dfs(int dep){
if(dep>=n){
int xa=0,xb=0,ar=0,br=0;
for(int i=1;i<=n;i++){
if(mp[i]==1){xa+=a[i];ar+=1;}else{xb+=a[i];br+=1;}}
if(abs(ar-br)<=1){s=min(abs(xa-xb),s);}
return ;}for(int j=0;j<=1;j++){mp[dep]=j;dfs(dep+1);}}
int main(){
cin>>n;
for(int i=1;i<=n;i++){cin>>a[i];}dfs(1);cout<<s;
return 0;}