#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#define Bug cout << "here\n";
using namespace std;
const int N = 3450;
int bag[12885];
int w[N], v[N];
int get_max(int a, int b) {
return a > b ? a : b;
}
int main() {
int i, k, n, m;
cin >> n >> m;
for(i = 1; i <= n; i++) {
cin >> w[i] >> v[i];
}
memset(bag, 0, sizeof(bag));
for(i = 1; i <= n; i++) {
for(k = m; k >= w[i]; k--) {
bag[k] = get_max(bag[k], bag[k-w[i]] + v[i]);
} /// bag[i][j] = get_min(bag[i-1][j], bag[i-1][j-w[i]]+v[i]);
}
cout << bag[m] << endl;
return 0;
}
本文介绍了一个使用C++解决背包问题的经典案例。通过动态规划的方法实现了物品的选择,以获得最大价值的同时不超过背包容量限制。代码中详细展示了如何初始化数组、读取输入数据以及更新状态以得到最优解。
2277

被折叠的 条评论
为什么被折叠?



