回溯法0-1背包问题代码
时间: 2023-07-07 22:44:51 浏览: 85
利用回溯法解0-1背包问题讲解
4星 · 用户满意度95%
好的,下面是回溯法解决0-1背包问题的代码,供您参考:
```
#include <iostream>
using namespace std;
const int N = 20;
int n, m, ans;
int w[N], v[N];
void dfs(int u, int sum_w, int sum_v) {
if (sum_w > m) return;
if (u == n) {
ans = max(ans, sum_v);
return;
}
dfs(u + 1, sum_w, sum_v);
dfs(u + 1, sum_w + w[u], sum_v + v[u]);
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> w[i] >> v[i];
}
dfs(0, 0, 0);
cout << ans << endl;
return 0;
}
```
在代码中,dfs函数的三个参数分别表示当前考虑到的物品编号、当前已经放入背包的物品的总重量和总价值。在dfs函数中,首先判断当前放入背包的物品的总重量是否超过了背包的容量,如果超过了就直接返回;然后判断是否已经考虑完了所有物品,如果考虑完了就更新最优解;如果还没考虑完就继续递归考虑下一个物品,分别考虑将其放入背包或不放入背包的情况。
希望这段代码对您有所帮助。
阅读全文