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

原题地址:http://www.rqnoj.cn/problem/72

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

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

代码:

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 int w[105];
 5 int t;
 6 int dp[105][10005];
 7 int s;
 8 int max(int a,int b)
 9 {
10     return a>b?a:b;
11 }
12 int main()
13 {
14     int i,j;
15     cin>>t;
16     int ss=0;
17     for(i=0;i<t;i++)
18     {
19         scanf("%d",&w[i]);
20         ss+=w[i];
21     }
22     s=ss/2;
23     for(j=0;j<s;j++)
24     {
25         if(j>=w[i]) dp[0][j]=w[i];
26         else dp[0][j]=0;
27     }
28     for(i=1;i<t;i++)
29     {
30         for(j=0;j<=s;j++)
31         {
32             if(j<w[i]) dp[i][j]=dp[i-1][j];
33             else dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+w[i]);
34         }
35     }
36     printf("%d\n",ss-2*dp[t-1][s]);
37     return 0;
38 }
View Code

 

posted on 2014-05-15 19:09  T^T  阅读(652)  评论(0编辑  收藏  举报

导航