bone0-1背包问题
来源:互联网 发布:谭浩强c语言ppt 编辑:程序博客网 时间:2024/06/05 09:10
15 101 2 3 4 55 4 3 2 1
14
题意:经典的0-1背包问题,给你物品数目以及背包的容量,下面是各个物品的价值以及容量,让你求背包能装入的最大价值
状态方程 dp[i][j] = max(dp[i-1][j],dp[i-1][j-vol[i]]+val[i])
表达式中各个符号的具体含义。
w[i] : 第i个物体的重量;
p[i] : 第i个物体的价值;
c[i][m] : 前i个物体放入容量为m的背包的最大价值;
c[i-1][m] : 前i-1个物体放入容量为m的背包的最大价值;
c[i-1][m-w[i]] : 前i-1个物体放入容量为m-w[i]的背包的最大价值;
由此可得:c[i][m]=max{c[i-1][m-w[i]]+pi , c[i-1][m]}
“将前i 件物品放入容量为v的背包中”这个子问题,若只考虑第i 件物品的策略(放或不放),那么就可以转
化为一个只和前i-1件物品相关的问题。如果不放第i 件物品,那么问题就转化为“前i-1件物品放入容量为v的
背包中”,价值为F[i-1; v];如果放第i 件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-Ci 的
背包中”,此时能获得的最大价值就是F[i-1;v-Ci] 再加上通过放入第i 件物品获得的价值Wi。
#include<iostream>#include<cstring>using namespace std;int dp[1001][1001];//前i件物品放入j容量大的背包中的最大价值int f(int a,int b){ if(a>=b) return a; else return b;}int main(){ int va[1001],vo[1001]; int k,n,v; cin>>k; while(k--) { memset(dp,0,sizeof(dp));//对其进行初始化 cin>>n>>v; for(int i=1;i<=n;++i) { cin>>va[i]; } for(int i=1;i<=n;++i) { cin>>vo[i]; } for(int i=1;i<=n;++i) { for(int j=0;j<=v;++j) { if(j<vo[i])//第i个物品无法放入 dp[i][j] = dp[i-1][j]; else dp[i][j] = f(dp[i-1][j],dp[i-1][j-vo[i]] + va[i]);//第i个物品放入后,看看是这个物品不放入大还是放入时大,因为他放入后,前i-1个物品可能放不进去 } } cout<<dp[n][v]<<endl; } return 0;}
- bone0-1背包问题
- 背包问题1:01背包
- 背包问题《1》01背包
- 背包问题(0-1背包、完全背包、多重背包)详解
- 背包问题和0-1背包问题
- 背包问题和0-1背包问题
- 背包问题系列--"0-1背包问题"
- 背包笔记-含0/1背包问题、完全背包问题、多重背包问题、二维背包问题、分组背包问题
- 背包问题(1)——01背包、完全背包、多重背包、混合三种背包问题
- 【背包问题】背包问题之0-1背包、完全背包、多重背包
- 0-1背包问题
- 0/1背包问题
- 0,1背包问题
- 背包问题 1
- 0-1背包问题
- 0/1背包问题
- 0-1背包问题
- // 0-1背包问题
- 3-3 字母排列
- sqlalchemy ImportError问题
- Git入门到进阶——回滚与分支,标签的使用
- 加inline关键字强制转为内联函数
- C++ 类的静态成员详细讲解
- bone0-1背包问题
- Max Sum
- python datetime模块详解
- PAT (Basic Level) Practise (中文)1043. 输出PATest(20)
- linux相关
- poj 2109 Power of Cryptography
- Could not write content: No serializer found for class ch.qos.logback.core.spi.LogbackLock
- Linux基础之:curl工具的使用
- pymongo实现对mongodb进行增删改查操作