当日总结
include
include
include
include
using namespace std;
int main() {
int n, V;
cin >> n >> V;
vector<pair<int, int>> items(n);
for (int i = 0; i < n; ++i) {
cin >> items[i].first >> items[i].second; // 体积、价值
}
// 方案1:不要求装满背包
vector<int> dp1(V + 1, 0);
for (auto &item : items) {
int v = item.first;
int w = item.second;
for (int j = V; j >= v; --j) {
dp1[j] = max(dp1[j], dp1[j - v] + w);
}
}
// 方案2:要求恰好装满背包
vector<int> dp2(V + 1, INT_MIN);
dp2[0] = 0; // 容量为0时,恰好装满的价值为0
for (auto &item : items) {
int v = item.first;
int w = item.second;
for (int j = V; j >= v; --j) {
if (dp2[j - v] != INT_MIN) {
dp2[j] = max(dp2[j], dp2[j - v] + w);
}
}
}
// 输出结果
cout << dp1[V] << endl;
cout << (dp2[V] != INT_MIN ? dp2[V] : 0) << endl;
return 0;
}
经典01背包

浙公网安备 33010602011771号