01背包问题动态规划c++
时间: 2023-10-13 08:20:35 浏览: 88
c++用动态规划实现01背包问题
5星 · 资源好评率100%
以下是01背包问题的动态规划实现代码,C++语言编写:
```c++
#include <iostream>
using namespace std;
int max(int a, int b) {
return (a > b) ? a : b;
}
int knapSack(int W, int wt[], int val[], int n) {
int i, w;
int K[n + 1][W + 1];
for (i = 0; i <= n; i++) {
for (w = 0; w <= W; w++) {
if (i == 0 || w == 0)
K[i][w] = 0;
else if (wt[i - 1] <= w)
K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
else
K[i][w] = K[i - 1][w];
}
}
return K[n][W];
}
int main() {
int val[] = {60, 100, 120};
int wt[] = {10, 20, 30};
int W = 50;
int n = sizeof(val) / sizeof(val[0]);
cout << knapSack(W, wt, val, n);
return 0;
}
```
其中,`knapSack`函数实现了01背包问题的动态规划解法,输入为背包容量`W`,物品重量数组`wt`,物品价值数组`val`以及物品数量`n`。函数返回背包能够容纳的最大价值。在主函数中,我们给出了一个具体的例子来演示01背包问题的求解。
阅读全文