背包问题(01背包、完全背包)死记应试
2017-09-07 00:26
330 查看
背包问题(01背包、完全背包)通用公式
01背包问题有n件物品每件物品的数量只有一件,求在背包容积为m的情况所能装的物品价值最大是多少
#include<iostream> #include<algorithm> using namespace std; int main() { int dp[10005]={0}; int weight[100]; int value[100]; int n,m; cin>>n>>m;//物品个数、背包容量 for (int i=1;i<=N; i++) { cin>>weight[i]>>value[i]; } for (int i=1; i<=n; i++) for (int j=weight[i]; j<=m; j++) { f[j]=max(f[j],f[j-weight[i]]+value[i]); } cout<<dp[m]<<endl; }
伪代码
dp[0...V]<-0 for i<- 1 to n for v <- w[i] to V dp[v] <- max{dp[v]; dp[v − w[i]] + v[i]} out <- dp[m]
完全背包问题
条件与01背包相同,不同的是每件物品的数量都有无数件,求所装物品最大价值是多少
#include<iostream> #include<algorithm> using namespace std; int main() { int dp[10005]={0}; int weight[100]; int value[100]; int n,m; cin>>n>>m;//物品个数、背包容量 for (int i=1;i<=N; i++) { cin>>weight[i]>>value[i]; } for (int i=1; i<=n; i++) for (int j=m; j>=weight[i]; j--) { f[j]=max(f[j],f[j-weight[i]]+value[i]); } cout<<dp[m]<<endl; }
通过伪代码来表示
dp[0...V]<-0 for i<- 1 to n for v <- V to w[i] dp[v] <- max{dp[v]; dp[v − w[i]] + v[i] out <- dp[m]
相关文章推荐
- 背包问题中的01背包和完全背包
- 背包问题总结(01背包、完全背包、多重背包)
- 01背包问题和完全背包问题
- 背包问题(01背包,完全背包,多重背包)
- DP背包问题小结(01背包,完全背包,需恰好装满或不需,一维DP、二维DP)
- 01背包问题和完全背包问题 (转载)
- 背包问题:01背包/完全背包
- 01背包问题和完全背包问题
- 01背包,完全背包,多重背包问题详细介绍以及源代码实现
- 01,完全 背包问题的一维数组
- 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏
- 01背包、完全背包、多重背包问题分析
- 01背包 完全背包问题
- 经典问题之01与完全背包总结
- 01背包和完全背包问题
- 背包(01背包、完全背包、多重背包)问题总结
- 背包问题:01背包与完全背包
- 背包问题详解:01背包、完全背包、多重背包
- 背包问题(01背包,完全背包,多重背包)
- 01 背包问题和完全背包