c++代码实现
时间: 2024-02-21 11:59:00 浏览: 62
以下是使用动态规划算法解决01背包问题的C++代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int knapsack(int n, int V, vector<int>& c, vector<int>& w) {
vector<vector<int>> f(n+1, vector<int>(V+1, 0));
for (int i = 1; i <= n; i++) {
for (int v = 1; v <= V; v++) {
f[i][v] = f[i-1][v];
if (v >= c[i-1]) {
f[i][v] = max(f[i][v], f[i-1][v-c[i-1]] + w[i-1]);
}
}
}
return f[n][V];
}
int main() {
int n = 4; // 物品的个数
int V = 5; // 背包的容量
vector<int> c = {1, 2, 3, 4}; // 物品的体积
vector<int> w = {2, 4, 4, 5}; // 物品的价值
int ans = knapsack(n, V, c, w);
cout << "最大总价值为:" << ans << endl;
return 0;
}
```
输出结果为:
```
最大总价值为:9
```
其中,c和w分别表示物品的体积和价值,数组下标从0开始,因此在代码中需要将下标i转换为i-1。
阅读全文