用C++采用回溯法解决0/1背包问题
时间: 2023-10-22 18:17:06 浏览: 108
以下是采用回溯法解决0/1背包问题的C++代码实现:
```c++
#include <iostream>
using namespace std;
int n, c; // 物品数量和背包容量
int w[100], v[100]; // 每个物品的重量和价值
int max_value = 0; // 最大总价值
void backtrack(int k, int weight, int value) {
if (k == n) {
if (value > max_value) {
max_value = value;
}
return;
}
if (weight + w[k] <= c) {
backtrack(k+1, weight+w[k], value+v[k]);
}
backtrack(k+1, weight, value);
}
int main() {
cin >> n >> c;
for (int i = 0; i < n; i++) {
cin >> w[i] >> v[i];
}
backtrack(0, 0, 0);
cout << max_value << endl;
return 0;
}
```
与 Python 实现相比,C++ 实现主要有以下几点区别:
1. C++ 中需要显式地声明变量类型,例如 int n, c;。
2. C++ 中需要使用 cin 读入数据,例如 cin >> n >> c;。
3. C++ 中递归函数的参数需要使用传值方式,例如 void backtrack(int k, int weight, int value)。
4. C++ 中需要在 main 函数中显式返回 0,例如 return 0;。
其他部分与 Python 实现类似。
阅读全文