Submission #1241630

#TimeUsernameProblemLanguageResultExecution timeMemory
1241630nlsosadKnapsack (NOI18_knapsack)C++20
100 / 100
99 ms34120 KiB
#include <bits/stdc++.h> #define int long long #define f first #define s second using namespace std; vector<pair<int, int>> a[2001]; int dp[2001][2001]; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, s; cin >> s >> n; for (int i = 1;i<=n;++i){ int v, w, k; cin >> v >> w >> k; a[w].push_back({v, k}); } for (int i = 1;i<=s;++i){ sort(a[i].begin(),a[i].end(), [](pair<int, int>p, pair<int, int> q){ return p.f > q.f; }); } for (int i = 1;i<=s;++i){ for (int j = 1;j<=s;++j){ dp[i][j] = max(dp[i][j], dp[i][j-1]); int tmp = i-j; int dem = 1; int tro = -1; int pf = 0; int pre = 0; while(tmp >= 0 and tro < (int)a[j].size()){ // cout << tmp << ' ' << tro << '\n'; // cout << "NGU\n"; if(dem>pf){ tro++; if(tro==a[j].size())break; pf+=a[j][tro].s; } pre += a[j][tro].f; dp[i][j] = max(dp[i][j], dp[tmp][j-1] + pre); tmp-=j; dem++; } } } /*for (int i = 1;i<=s;++i){ for (int j = 1;j<=s;++j){ cout << dp[i][j] << ' '; } cout << '\n'; }*/ cout << dp[s][s]; }
#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...