题目描述
superwyh的学校要举行拔河比赛,为了在赛前锻炼大家,老师决定把班里所有人分为两拨,进行拔河因为为锻炼所以为了避免其中一方的实力过强老师决定以体重来划分队伍,尽
量保持两个队伍的体重差最少,因为老师对结果没兴趣,所以只告诉老师最小的体重差是多少就行了。这个受苦受累的任务就交给superwyh了,因为这两天superwyh的后背间谍sjh
闹肚子了,所以只好superwyh亲自去调查每个人的体重,但是仅仅知道体重依然难以确定到底如何分配队伍,请各位oier帮助superwyh出出主意。
输入格式第一行为人数(1<=n<=100),从第二行开始是每个人的体重(0<=m<=100)。
输出格式最小体重差。
样例输入
4
10
23
41
12
样例输出
4
动规
/**/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
bool f[120][1450]={0};//[人数][体重差]
int n;
int w[200];
int main(){
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++)scanf("%d",&w[i]);
f[0][0]=1;
for(i=1;i<=n;i++)//决策对象
for(j=0;j<=400;j++)//体重差
{
if(f[i-1][j]){
f[i][abs(j+w[i])]=1;//分在更重的队
f[i][abs(j-w[i])]=1;//分在更轻的队
}
}
for(i=0;i<=400;i++){//从0开始
if(f[n][i]){printf("%d\n",i);break;}
}
return 0;
}