Submission #1192031

#TimeUsernameProblemLanguageResultExecution timeMemory
1192031bestbestKnapsack (NOI18_knapsack)C++20
100 / 100
59 ms34372 KiB
#include <bits/stdc++.h> using namespace std; #define en '\n' #define sp ' ' typedef long long ll; #define Linux ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define pii pair<ll,ll> const int N=2e3+5; const ll M=1e9+7; int s,n; vector<pii> v[N]; ll cnt[N][N]; ll dp[N]; ll val,wei,k; ll mx; int idx; int main(){Linux cin >> s >> n; for(int i=1;i<=n;i++){ cin >> val >> wei >> k; v[wei].push_back({val,k}); } for(int i=1;i<=s;i++){ sort(v[i].begin(),v[i].end(),greater<pii>()); for(int j=0;j<v[i].size();j++){ swap(v[i][j].first,v[i][j].second); if(j>0){ v[i][j].first+=v[i][j-1].first; } } } // for(int i=1;i<=s;i++){ // cout << i << (i<10?" : ":": "); // for(auto [count,vv]:v[i]){ // cout << count << ',' << vv << sp; // } // cout << en; // } for(int i=1;i<=s;i++){ // cout << i << (i<10?" : ":": "); mx=0; idx=0; for(int j=1;j<=i;j++){ if(v[j].empty())continue; if(cnt[i-j][j]==v[j].back().first)continue; auto it=upper_bound(v[j].begin(),v[j].end(),make_pair(cnt[i-j][j],M))-v[j].begin(); if(it>=v[j].size()){ // cout << j << "out "; continue; } // cout << "cntbef" << cnt[i-j][j] << 'j' ; // cout << j << ',' << it << "value" << v[j][it].second << sp; // cout << v[j][it].first << sp; if(mx<v[j][it].second+dp[i-j]){ mx=v[j][it].second+dp[i-j]; idx=j; } } // cout << "max=" << idx; // cout << en; if(mx<dp[i-1]){ dp[i]=dp[i-1]; for(int j=1;j<=s;j++){ cnt[i][j]=cnt[i-1][j]; } continue; } dp[i]=mx; for(int j=1;j<=s;j++){ cnt[i][j]=cnt[i-idx][j]; // cout << cnt[i][j] << sp; } cnt[i][idx]++; } // for(int i=1;i<=s;i++){ // cout << i << (i<10?" : ":": "); // for(int j=1;j<=s;j++){ // cout << cnt[i][j] << sp; // } // cout << en; // } // for(int i=1;i<=s;i++)cout << i << sp << dp[i] << en; cout << dp[s] << en; 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...