讨论 / 用c语言来解决这个问题
liusikai 2013-06-30 09:46:00
点我顶贴 收藏 删除
#include<stdio.h>

int max(int x,int y)

{

int z;

if(x>y) z=x;

else z=y;

return z;

}

int main()

{

int value[100],f[10000]={0};

int n,m,i,j,t,s=0;

scanf("%d",&n);

for(i=0;i<n;i++)

{

scanf("%d",&value[i]);

}

for(i=0;i<n;i++)

{

s=s+value[i];

}

m=s/2;/*......此题的总思想是把其转化为01背包问题:我们要求两队的体重相差最小则要求两个队

的体重都到达最大值(在题目给的数据中),当两队都达到最大值后必然两队的体重就相差最小,

即两个队朝同一目标靠拢则相异最小。所以两个队最大的体重为所有体重之和的一半(s/2),然后再

背包求出一个两队都能够达到的最大值f[m],则两个队相差最小的体重数为s-2*f[m].*/

for(i=0;i<n;i++)

{

for(j=m;j>0;j--)

{

if(j-value[i]>=0)

{

f[j]=max(f[j],f[j-value[i]]+value[i]);

}

}

}

t=s-2*f[m];

printf("%d\n",t);

return 0;

}

#1 卫巍@2018-02-04 01:46:28
回复 删除

查看更多回复
提交回复