제출 #1320602

#제출 시각아이디문제언어결과실행 시간메모리
1320602tkm_algorithmsKnapsack (NOI18_knapsack)C++20
73 / 100
578 ms327680 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int ll using P = pair<int, int>; #define all(x) x.begin(), x.end() #define rep(i, l, n) for (int i = l; i < (n); ++i) #define sz(x) (int)x.size() const char nl = '\n'; const int mod = 1e9+7; struct node { int v, w, k; }; void solve() { int s, n; cin >> s >> n; vector<node> a(n); for (auto &i: a)cin >> i.v >> i.w >> i.k; sort(all(a), [](const node& x, const node& y) { return x.v > y.v; }); int dp[n+1][s+1]; memset(dp, 0, sizeof dp); rep(i, 0, n) { for (int j = s; j >= 1; --j) { if (i>0)dp[i][j] = dp[i-1][j]; for (int k = j-1; k >= 0; --k) { int mn = min((j-k)/a[i].w, a[i].k); dp[i][j] = max(dp[i][j], (i-1>=0?dp[i-1][k]:0ll)+mn*a[i].v); } } } int res = 0; rep(i, 0, s+1)res = max(res, dp[n-1][i]); cout << res << nl; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...