蓝桥杯 01背包 动态规划
2017-02-07 16:22
134 查看
问题描述
给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个.
输入格式
输入的第一行包含两个整数n, m,分别表示物品的个数和背包能装重量。
以后N行每行两个数Wi和Vi,表示物品的重量和价值
输出格式
输出1行,包含一个整数,表示最大价值。
样例输入
3 5
2 3
3 5
4 7
样例输出
8
数据规模和约定
1<=N<=200,M<=5000.
01背包的思路,定义一个二位数组 dp[i][j] 表示 背包剩余重量为i且物品件数为j的最大价值,
然而对于每个物品都有买跟不买两种选择,
所有,
子问题: 是买还是不买此物品所能得到的最大价值 更大呢?
由此可以得出动态方程:
给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个.
输入格式
输入的第一行包含两个整数n, m,分别表示物品的个数和背包能装重量。
以后N行每行两个数Wi和Vi,表示物品的重量和价值
输出格式
输出1行,包含一个整数,表示最大价值。
样例输入
3 5
2 3
3 5
4 7
样例输出
8
数据规模和约定
1<=N<=200,M<=5000.
01背包的思路,定义一个二位数组 dp[i][j] 表示 背包剩余重量为i且物品件数为j的最大价值,
然而对于每个物品都有买跟不买两种选择,
所有,
子问题: 是买还是不买此物品所能得到的最大价值 更大呢?
由此可以得出动态方程:
当i<0时 maxValue =0
其他情况 maxValue = max(getMax(bagWeight-w[i],i-1)+v[i] ,getMax(bagWeight,i-1));AC代码如下,
int weight[MAX_W][MAX_N] 数组 便是 dp[i][j]
#include<iostream> #include<cstdlib> #include<malloc.h> #include<algorithm> #include <memory.h> using namespace std; #define MAX_N 201 #define MAX_W 5001 int w[MAX_N]; //物体重量 int v[MAX_N]; //物体价值 int n; //物体个数 int m; //背包的最大重量 int weight[MAX_W][MAX_N]; //weight[i][j] 表示背包为i重量产品数为j 的最高价值 int getMax(int bagWeight,int i){ int value; if(i < 0) return 0; //没有物品 if(weight[bagWeight][i] != -1){ value=weight[bagWeight][i]; //“备忘录”,此前保存的最大值 } else if(i==0){ // 最后一个物品 if(bagWeight >= w[i])return v[i]; //买 else return 0; //买不起 } else if(i!=0 && bagWeight >= w[i]){ //动态规划 value = max(getMax(bagWeight-w[i],i-1)+v[i] ,getMax(bagWeight,i-1)); } else { //同样买不起 value = getMax(bagWeight,i-1); } weight[bagWeight][i] = value; //保存最大值 return value; //返回最大值 } int main() { // freopen("2.txt","r",stdin); memset(weight,-1,sizeof(weight)); // cout<< sizeof(weight); int maxValue=0; cin>>n>>m; for(int i=0;i<n;i++) cin>>w[i]>>v[i]; maxValue=getMax(m,n-1); cout<<maxValue; return 0; }
相关文章推荐
- 蓝桥杯_算法提高_金明的预算方案(动态规划、01背包变形)
- 蓝桥杯-01背包-动态规划-java
- 【动态规划】之01背包问题(难度:2星)
- 01背包问题(动态规划)
- HDU_2546_饭卡(动态规划_01背包)
- 动态规划解决01背包问题
- 动态规划之01背包问题
- 蓝桥杯-数的划分-动态规划-java
- 从01背包问题理解动态规划
- hiho第六周——01背包(动态规划)
- 蓝桥杯Java-动态规划-拦截导弹
- 算法竞赛入门经典:第九章 动态规划初步 9.1恰好型01背包
- 算法导论_01背包问题.(动态规划)
- hdu 2955 动态规划 01背包
- nyoj289 苹果 典型01背包问题(动态规划)思路及实现过程
- 【算法】动态规划的用法——01背包问题
- 01背包问题 动态规划
- 蓝桥杯《算法提高 01背包 》
- 第八届蓝桥杯 包子凑数(动态规划/完全背包+扩展欧几里得)
- 北工大算法 作业2 动态规划 01背包问题