Submission #1284413

#TimeUsernameProblemLanguageResultExecution timeMemory
1284413tntKnapsack (NOI18_knapsack)C++20
100 / 100
39 ms2040 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define ll long long #define s second #define f first #define all(v) v.begin(),v.end() const long long inf = 2e9 + 7; const int N = 2000 + 101; vector <pair<int,int>> g[N]; void solve(){ int s,n; cin >> s >> n; vector <int> dp(s + 10,-inf); dp[0] = 0; for(int i = 1; i <= n; i++){ int v,w,k; cin >> v >> w >> k; k = min(k,s); g[w].pb({v,k}); } for(int i = 1; i <= s; i++){ sort(all(g[i])); reverse(all(g[i])); } vector <pair<int,int>> a; for(int i = 1; i <= s; i++){ int d = s / i,j = 0; while(d > 0){ if(j >= g[i].size()) break; a.pb({i,g[i][j].f}); g[i][j].s--,d--; if(g[i][j].s == 0) j++; } } for(int i = 0; i < a.size(); i++){ for(int j = s; j >= a[i].f; j--){ if(dp[j] < dp[j - a[i].f] + a[i].s) dp[j] = dp[j - a[i].f] + a[i].s; } } int mx = 0; for(int i = 1; i <= s; i++) mx = max(mx,dp[i]); cout << mx; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); //freopen("promote.in", "r", stdin); //freopen("promote.out", "w", stdout); int t = 1; while(t--){ solve(); } }
#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...