01背包、完全背包、多重背包问题的C++实现及路径记录
2017-04-19 17:35
746 查看
这里主要实现路径记录,只求最值问题移步
01背包、完全背包、多重背包问题的C++实现
以下均打印输出路径,即装入背包的物品序号,和最大值。
01背包、完全背包、多重背包问题的C++实现
以下均打印输出路径,即装入背包的物品序号,和最大值。
01背包问题
#include <iostream> #include<algorithm> using namespace std; int main() { int total_weight = 10; int w[6] = { 0,5,4,3,2,1 }; int v[6] = { 0,1,2,3,4,5 }; int dp[11] = { 0 }; int path[6][11] = { 0 }; for (int i = 1; i <= 5; i++) for (int j = 10; j >= w[i]; j--) if (dp[j] < dp[j - w[i]] + v[i]) { dp[j] = dp[j - w[i]] + v[i]; path[i][j] = 1; } int i = 5, j = 10; while (i > 0 && j > 0) { if (path[i][j] == 1) { cout << i << ' '; j -= w[i]; } i--; } cout << endl; cout << "总的价值为: " << dp[10] << endl; return 0; }
完全背包问题
#include <iostream> #include<algorithm> using namespace std; int main() { int total_weight = 10; int w[6] = { 0,5,4,3,2,1 }; int v[6] = { 0,1,2,3,4,5 }; int dp[11] = { 0 }; int path[6][11] = { 0 }; for (int i = 1; i <= 5; i++) for (int j = w[i]; j <= 10; j++) if (dp[j] < dp[j - w[i]] + v[i]) { dp[j] = dp[j - w[i]] + v[i]; path[i][j]=1; } int i = 5, j = 10; while (i > 0 && j > 0) { if (path[i][j] == 1) { cout << i << ' '; j -= w[i]; } else i--; } cout << endl; cout << "总的价值为: " << dp[10] << endl; return 0; }
多重背包问题
#include <iostream> #include<algorithm> using namespace std; int main() { int total_weight = 10; int w[6] = { 0,5,4,3,2,1 }; int v[6] = { 0,1,2,3,4,5 }; int cot[6] = { 0,1,2,1,2,1 }; int dp[11] = { 0 }; int path[6][11] = { 0 }; for (int i = 1; i <= 5; i++) for (int k = 1; k <= cot[i]; k++) for (int j = 10; j >= w[i]; j--) if (dp[j] < dp[j - w[i]] + v[i]) { dp[j] = dp[j - w[i]] + v[i]; path[i][j] = 1; } int i = 5, j = 10; while (i > 0 && j > 0) { if (path[i][j] == 1&&cot[i]) { cout << i << ' '; j -= w[i]; cot[i]--; } else i--; } cout << endl; cout << "总的价值为: " << dp[10] << endl; return 0; }
相关文章推荐
- 01背包、完全背包、多重背包问题的C++实现
- 0-1背包问题与完全背包问题C++实现 动态规划
- 01背包,完全背包,多重背包问题详细介绍以及源代码实现
- 01背包问题 及c++ 代码实现
- 01背包问题的C/C++实现
- 0-1背包问题与完全背包问题C++实现 动态规划
- 0-1背包问题与完全背包问题C++实现 动态规划
- c++实现0-1背包问题完整源码(动态…
- 最短路径问题——Dijkstra算法(C++实现)
- 背包问题——“01背包”及“完全背包”装满背包的方案总数分析及实现
- c++实现0-1背包问题完整源码(动态规划实现)
- 背包问题(01背包,完全背包,多重背包)
- dynamic programming --knapsack problem 背包问题(c++实现)
- DP实例之01背包问题C语言实现
- zoj2156Charlie's Change 多重背包可行性问题+记录路径
- 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目
- 背包问题--完全背包 详解以及实现
- 背包问题——“完全背包”详解及实现(包含背包具体物品的求解)
- 背包问题教程-01背包,完全背包,多重背包,混合背包
- 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏