文章
6
粉丝
38
获赞
1
访问
2.7k
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, W;
while (cin >> n >> W) {
vector<int> weights(n), values(n);
// 读取每种物品的重量和价值
for (int i = 0; i < n; i++) {
cin >> weights[i] >> values[i];
}
// 动态规划数组,大小为背包容量 + 1
vector<int> dp(W + 1, 0);
// 进行动态规划计算
for (int i = 0; i < n; i++) {
// 完全背包核心转移方程,反向遍历
for (int j = weights[i]; j <= W; j++) {
dp[j] = max(dp[j], dp[j - weights[i]] + values[i]);
}
}
// 输出最大价值
cout << dp[W] << endl;
}
return 0;
}
/*
物品数量 n = 3
背包容量 W = 4
物品重量和价值:
物品 1: 重量 1,价值 2
物品 2: 重量 2,价值 5
物品 3: 重量 3,价值 7
这段代码首先初始化一个动态规划数组 dp,其长度为背包的容量 W + 1,即 dp[0] 到 dp[4],所有元素初始化为 0,表示最初背包的价值为 0。
动态规划计算过程:
第一轮循环:处理...
登录后发布评论
红色字体前面的1可以忽略