Submission #1276602

#TimeUsernameProblemLanguageResultExecution timeMemory
1276602almazKnapsack (NOI18_knapsack)C++20
73 / 100
337 ms327680 KiB
#include <bits/stdc++.h> using namespace std; #define int long long // #define endl '\n' #define ff first #define ss second #define pb push_back #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define ar array const int MOD = 1e9 + 7,INF = 1e18, N = 2e5 + 5; /* */ void solve(){ int s , n; cin >> s >> n; vector <ar <int, 3>> a(n); set <int> st; map <int, vector <pair<int,int>>> b; for(int i = 0;i < n;i++){ int v , w , k; cin >> v >> w >> k; if(w > s) continue; b[w].pb({v , k}); st.insert(w); } vector <int> dp(s + 1, 0); vector <int> use(s + 1); use[0] = 1; for(int w : st){ vector <int> c; for(auto [v , k] : b[w]){ for(int i = 0;i < min(k , 2000ll);i++){ c.pb(v); } } sort(rall(c)); for(int k = s;k >= 0;k--){ if(use[k]){ // cout<<k<<endl; int j = 0; for(int i = w + k;i <= s;i += w){ if(j == (int)c.size()) break; dp[i] = max(dp[i] , dp[i - w] + c[j]); j++; use[i] = 1; } } } // for(int i = 0;i <= s;i++){ // cout<<dp[i]<<' '; // } // cout<<endl; } int ans = 0; for(int i = 0;i <= s;i++){ // cout<<dp[i]<<' '; ans = max(ans , dp[i]); } // cout<<endl; cout<<ans<<endl; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int ti = 1; // cin >> ti; while (ti--) { 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...