您的位置:首页 > 其它

【解题报告】[动态规划]RQNOJ - PID72 / 拔河比赛

2014-05-15 19:09 351 查看
原题地址:http://www.rqnoj.cn/problem/72

解题思路:基本的01背包问题。

  要求的就是在这些人中选出一些人,使得这些人的体重的和 不超过所有人的体重的一半 并最大。

代码:

#include<stdio.h>
#include<iostream>
using namespace std;
int w[105];
int t;
int dp[105][10005];
int s;
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int i,j;
cin>>t;
int ss=0;
for(i=0;i<t;i++)
{
scanf("%d",&w[i]);
ss+=w[i];
}
s=ss/2;
for(j=0;j<s;j++)
{
if(j>=w[i]) dp[0][j]=w[i];
else dp[0][j]=0;
}
for(i=1;i<t;i++)
{
for(j=0;j<=s;j++)
{
if(j<w[i]) dp[i][j]=dp[i-1][j];
else dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+w[i]);
}
}
printf("%d\n",ss-2*dp[t-1][s]);
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: