Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
88818 sh25_zhangyj 最大购物优惠 C++ 通过 0 MS 256 KB 1447 2026-05-15 15:47:57

Tests(1/1):


#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; }


测评信息: