C++ 背包问题
2017-09-02 21:14
141 查看
题目描述
有许多东西要放入背包,但背包容量有限,现给出物品的种类,以及每种物品的数量、体积和价值,求出背包能够装物品的最大价值。输入
输入有多组数据,每组数据的第一行有2个整数,物品种数n(1<=n<=2000)和背包装载体积v(1<=v<=500)。2行到i+1行每行3个整数,为第i种物品的数量m(1<=m<=5000)、体积w(1<=w<=20)、价值s(1<=s<=100)。
输出
对于每组数据输出一个整数,即为能拿到的最大的物品价值总和。示例
输入2 10
3 4 3
2 2 5
输出(2*5+1*3 = 13)
13
思路及代码
多重背包, 转化为以二进制形式的01背包#include <iostream> #include <algorithm> #include <cstring> using namespace std; int main() { int num, vol; cin >> num >> vol; int m[num+1], w[num+1], s[num+1]; memset(m, 0, sizeof(m)); memset(w, 0, sizeof(w)); memset(s, 0, sizeof(s)); for (int i = 1; i <= num; ++i) { cin >> m[i] >> w[i] >> s[i]; } int dp[vol+1] ; memset(dp, 0, sizeof(dp)); for (int i = 1; i <= num; i++) for (int k = 1; k <= m[i]; k++) for (int j = vol; j >= w[i]; j--) dp[j] = max(dp[j], dp[j - w[i]] + s[i]); cout << "总的价值为: " << dp[10] << endl; system("pause"); return 0; }
相关文章推荐
- 0/1背包问题 - 动态规划(C++实现)
- 01背包、完全背包、多重背包问题的C++实现及路径记录
- C++:背包问题总结
- 最简单的0-1背包问题c++代码实例及运行结果
- c++实现0-1背包问题完整源码续(动态规划+回溯法实现)
- 动态规划解背包问题/C++/Knapsack problem
- 最简单的0-1背包问题c++代码实例及运行结果
- 0-1背包问题.(c++版)
- 完全背包问题动态规划c++
- 最简单的0-1背包问题c++代码实例及运行结果
- Charm Bracelet poj 3624 (01) 背包问题 c++
- 混合三种背包问题c++
- 0-1背包问题与动态规划的C/C++代码
- 贪心算法运用于背包问题(C++实现)
- 最简单的0-1背包问题c++代码实例及运行结果
- C++实现多目标遗传算法(0/1背包问题)
- 0/1背包问题 c++
- C++回溯法0/1背包问题DKNAP
- (C++)分支限界法求解背包问题
- 最简单的0-1背包问题c++代码实例及运行结果