程设模拟考 H:宠物小精灵之收服

题目见此:http://cxsjsx.openjudge.cn/2013weekend5a/H/

解题思路:

  1. 典型的01背包,不过是二维限制的
  2. 最后要把V2扫一遍找伤血最少的情况

贴代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int N, V, V2, dp[1000][500]={0}, c1[100], c2[100];
 6 
 7 int main()
 8 {
 9     cin >> V >> V2 >> N;
10     for(int i=1 ; i<=N ; i++)
11         cin >> c1[i] >> c2[i];
12     dp[0][0] = 0;
13     for(int i=1 ; i<=N ; i++)
14         for(int j=V ; j>=c1[i] ; j--)
15             for(int k=V2 ; k>=c2[i] ; k--)
16                 dp[j][k] = max(dp[j][k], dp[j-c1[i]][k-c2[i]]+1);
17     for(int k=0 ; k<=V2 ; k++)
18         if(dp[V][k] == dp[V][V2])
19         {
20             cout << dp[V][k] << " " << V2-k << endl;
21             break;
22         }
23 }
View Code

 

posted on 2013-06-16 15:56  白~  阅读(511)  评论(0编辑  收藏  举报

导航