我希望你是我独家记忆

一段永远封存的记忆,随风而去
posts - 263, comments - 31, trackbacks - 0, articles - 3
   :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

HLOJ_1039_动态规划

Posted on 2009-07-01 10:32 Hero 阅读(133) 评论(0)  编辑 收藏 引用 所属分类: 代码如诗--ACM
 1 //1039  Accepted  250 9660 1046 C++  
 2 
 3 //动态规划
 4 /*
 5 dp[i][j][k]表示在前i个怪物中,在体力消耗不超过j的情况下,选出不超过k个怪物
 6            杀死它们所能得到的最大经验
 7 
 8 dp[i][j][k] = fmax( dp[i-1][j][k], dp[i-1][j-w[i]][k-1]+v[i] ) ;
 9                      不选第i个怪物           选择第i个怪物
10 
11 顺序动归,每一个怪物都有选与不选两种选择
12 */
13 #include <iostream>
14 using namespace std ;
15 
16 int inn, inm, ink, ins ;
17 
18 int w[200] ;
19 int v[200] ;
20 int dp[110][110][110] ;
21 
22 int fmax( int a, int b ) 
23 {
24     return a > b ? a : b ;
25 }
26 
27 int main()
28 {
29     while( cin >> inn >> inm >> ink >> ins )
30     {
31         forint k=1; k<=ink; k++ )
32         {
33             cin >> v[k] >> w[k] ;
34         }
35 
36         memset( dp, 0sizeof(dp) ) ;
37 
38         forint k=1; k<=ins; k++ )
39         {
40             forint j=0; j<=inm; j++ )
41             {
42                 if( j >= w[1] ) 
43                 {
44                     dp[1][j][k] = v[1] ;
45                 }
46             }
47         }
48 
49         forint i=2; i<=ink; i++ )
50         {
51             forint k=1; k<=ins; k++ )
52             {
53                 forint j=0; j<=inm; j++ )
54                 {
55                     if( j >= w[i] )
56                     {
57                         dp[i][j][k] = fmax( dp[i-1][j][k], dp[i-1][j-w[i]][k-1]+v[i] ) ;
58                     }
59                     else
60                     {
61                         dp[i][j][k] = dp[i-1][j][k] ;
62                     }
63                 }
64             }
65         }
66 
67         int ans = -1 ;
68         forint j=0; j<=inm; j++ )
69         {
70             if( dp[ink][j][ins] >= inn )
71             {
72                 ans = j ; break ; 
73             }
74         }
75 
76         if( ans < 0 )
77             printf( "%d\n", ans ) ;
78         else
79             printf( "%d\n", inm-ans ) ;
80     }
81     return 0 ;
82 }

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理