码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 3496 二维费用的01背包

时间:2015-07-15 20:57:12      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

算是比较简单的二维费用背包了吧,注意在某一维上要求“装满”。

另外:对于多维费用的背包,最内层的循环可以逆着写,想一想,为什么。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 using namespace std;
 6 
 7 const int INF = -99999999;
 8 const int N = 101;
 9 const int L = 1001;
10 int dp[N][L];
11 int n, m, l;
12 
13 void init()
14 {
15     memset( dp, -1, sizeof(dp) );
16     for ( int j = 0; j < L; j++ )
17     {
18         dp[0][j] = 0;
19     }
20 }
21 
22 int main ()
23 {
24     int t;
25     scanf("%d", &t);
26     while ( t-- )
27     {
28         scanf("%d%d%d", &n, &m, &l);
29         init();
30         for ( int i = 1; i <= n; i++ )
31         {
32             int time, value;
33             scanf("%d%d", &time, &value);
34             for ( int j = m; j > 0; j-- )
35             {
36                 for ( int k = l; k >= time; k-- )
37                 {
38                     if ( dp[j - 1][k - time] != -1 )
39                     {
40                         dp[j][k] = max( dp[j][k], dp[j - 1][k - time] + value );
41                     }
42                 }
43             }
44         }
45         int ans = dp[m][l] == -1 ? 0 : dp[m][l];
46         printf("%d\n", ans);
47     }
48     return 0;
49 }

 

hdu 3496 二维费用的01背包

标签:

原文地址:http://www.cnblogs.com/huoxiayu/p/4649338.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!