0 1背包续,考虑递推关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0 1背包续,考虑递推关系相关的知识,希望对你有一定的参考价值。

技术分享技术分享技术分享
 
因为w太大了 
若dp[i][j] : 表示选取第i件物品,重量不超过j的物品的价值的最大, 第二层循环耗费太大
 
重新考虑递推关系,
dp[i][j] 表示 选取 i 件物品, 价值为 j 时的最小重量 
 
技术分享
 
 1 int dp[105][10005];
 2 
 3 int v[105];
 4 int w[105];
 5 
 6 int main(){
 7     
 8     int n,W;
 9     while(scanf("%d",&n) != EOF && n){
10         for(int i = 0 ; i < n ; i ++){
11             scanf("%d%d",&w[i],&v[i]);
12         }
13         scanf("%d",&W);    
14         
15         memset(dp[0],0x7f7f7f7f,sizeof(dp[0]));
16         dp[0][0] = 0;
17         /*
18             dp[i][j] 表示 选取 i 件物品, 价值为 j 时的最小重量 
19         */
20         for(int i = 0 ; i < n ; i ++){
21             for(int j = 0 ; j <= 100*100 ; j ++){
22                 if(j < v[i]){
23                     dp[i+1][j] = dp[i][j];
24                 }else{
25                     dp[i+1][j] =  min(dp[i][j],dp[i][j-v[i]] + w[i]);
26                 }
27             }
28         } 
29         
30         int ans = 0;
31         for(int i = 0 ; i <= 10000 ; i ++){
32             if(dp[n][i] <= W) ans = i;
33         }
34         printf("%d\n",ans);
35         
36     }
37     return 0;
38 }
39 /*
40 4
41 2 3
42 1 2
43 3 4
44 5
45 
46 7
47 */

 

以上是关于0 1背包续,考虑递推关系的主要内容,如果未能解决你的问题,请参考以下文章

背包模型

背包问题(0-1背包+完全背包)

续:纠正:ubuntu7.04可以安装,而且完美的安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4不含4以上,及 ubuntu 7.04不含(代码片段

POJ 3181 Dollar Dayz 完全背包

POJ 2229 sumset ( 完全背包 || 规律递推DP )

D. Caesar's Legions 背包Dp 递推DP