C++用户输入利用回溯法的递归框架,实现 01 背包问题,(问题设定:背包的限定重 量为 6,物品数量为 4,四个物品的重量分别为 5,3,2,1;四个物品的价值分别为 4,4,3,1。)代码
时间: 2024-03-21 17:44:16 浏览: 17
好的,以下是C++用户输入利用回溯法的递归框架实现01背包问题的代码:
```c++
#include <iostream>
using namespace std;
const int MAXN = 100; // 物品数量上限
int w[MAXN], v[MAXN]; // 物品重量和价值数组
int n, maxw, ans = 0; // 物品数量,背包限定重量,最大价值
void dfs(int idx, int tw, int tv) {
if (idx == n) { // 所有物品都考虑完毕
if (tw <= maxw && tv > ans) { // 满足背包容量限制,更新最大价值
ans = tv;
}
return;
}
dfs(idx + 1, tw, tv); // 不选择当前物品
dfs(idx + 1, tw + w[idx], tv + v[idx]); // 选择当前物品
}
int main() {
// 用户输入物品数量和背包限定重量
cout << "请输入物品数量和背包限定重量:";
cin >> n >> maxw;
// 用户输入每个物品的重量和价值
cout << "请输入每个物品的重量和价值:" << endl;
for (int i = 0; i < n; i++) {
cin >> w[i] >> v[i];
}
// 求解01背包问题
dfs(0, 0, 0);
// 输出最大价值
cout << "最大价值为:" << ans << endl;
return 0;
}
```
该代码与上一个代码的区别在于,用户可以通过输入来自定义物品数量、背包限定重量和每个物品的重量和价值。