有一个背包的最大能承受的重量是 M ,有 n 个物品,每个物品有各自的重量和价值,计算在不超出背包最大承重限制下,背包中物品最大价值可以是多少?给出c++代码
时间: 2024-05-13 16:17:51 浏览: 143
这是一个经典的背包问题,可以使用动态规划来解决。我们用一个二维数组dp[i][j]表示前i个物品放入容量为j的背包中所能获得的最大价值。则状态转移方程如下:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i])
其中w[i]表示第i个物品的重量,v[i]表示第i个物品的价值。如果第i个物品的重量大于当前背包容量j,则只能选择不放,即dp[i][j] = dp[i-1][j]。
C++代码如下:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
int n, m, w[MAXN], v[MAXN], dp[MAXN][MAXN];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> w[i] >> v[i];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (w[i] > j) {
dp[i][j] = dp[i-1][j];
} else {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]);
}
}
}
cout << dp[n][m] << endl;
return 0;
}
```
输入格式为:第一行为物品数量n和背包容量m,接下来n行每行两个数表示物品的重量和价值。输出为背包中可获得的最大价值。
阅读全文