题目描述
superwyh的学校要举行拔河比赛,为了在赛前锻炼大家,老师决定把班里所有人分为两拨,进行拔河因为为锻炼所以为了避免其中一方的实力过强老师决定以体重来划分队伍,尽
量保持两个队伍的体重差最少,因为老师对结果没兴趣,所以只告诉老师最小的体重差是多少就行了。这个受苦受累的任务就交给superwyh了,因为这两天superwyh的后背间谍sjh
闹肚子了,所以只好superwyh亲自去调查每个人的体重,但是仅仅知道体重依然难以确定到底如何分配队伍,请各位oier帮助superwyh出出主意。
输入格式
第一行为人数(1<=n<=100),从第二行开始是每个人的体重(0<=m<=100)。
输出格式
最小体重差。
样例输入
样例输出
提交题目 C++ Language
01背包简单应用
ac代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define max(a,b) (a>b?a:b)
int dp[11000],a[110];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,sum=0,j;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
int m=sum/2;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
for(j=m;j>=a[i];j--)
{
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
}
}
printf("%d\n",abs(sum-2*dp[m]));
}
}