| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 88818 | sh25_zhangyj | 最大购物优惠 | C++ | 通过 | 0 MS | 256 KB | 1447 | 2026-05-15 15:47:57 |
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct Good { int w, v, val, idx; }; int main() { int W, V, n; cin >> W >> V >> n; vector<Good> goods(n); for (int i = 0; i < n; ++i) { cin >> goods[i].w >> goods[i].v >> goods[i].val; goods[i].idx = i + 1; } vector<vector<int>> dp(W + 1, vector<int>(V + 1, 0)); vector<vector<vector<bool>>> selected(n + 1, vector<vector<bool>>(W + 1, vector<bool>(V + 1, false))); for (int k = 1; k <= n; ++k) { int w = goods[k-1].w; int v = goods[k-1].v; int val = goods[k-1].val; for (int i = W; i >= w; --i) { for (int j = V; j >= v; --j) { if (dp[i - w][j - v] + val > dp[i][j]) { dp[i][j] = dp[i - w][j - v] + val; selected[k][i][j] = true; } } } } vector<int> res; int i = W, j = V; for (int k = n; k >= 1; --k) { if (selected[k][i][j]) { res.push_back(goods[k-1].idx); i -= goods[k-1].w; j -= goods[k-1].v; } } sort(res.begin(), res.end()); cout << dp[W][V] << endl; for (size_t p = 0; p < res.size(); ++p) { if (p > 0) cout << " "; cout << res[p]; } if (!res.empty()) cout << endl; return 0; }