Submission #1283374

#TimeUsernameProblemLanguageResultExecution timeMemory
1283374muramasaKnapsack (NOI18_knapsack)C++20
100 / 100
49 ms34360 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fr(i,a,b,c) for(int i = a;i<b;i+=c) #define fre(i,a,b,c) for(int i = a;i>=b;i-=c) #define fs first #define sc second #define all(a) a.begin(),a.end() #define IINF 2000000005 #define LINF 1000000000000000005 #define MOD 998244353 #define str string #define endl '\n' using pii = pair<int,int>; using pll = pair<ll,ll>; using tiii = tuple<int,int,int>; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int s,n;cin >> s >> n; vector<vector<pll>> a(s+1); for(int i = 0 ;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].rbegin(),a[i].rend()); vector<vector<ll>> dp(s+1,vector<ll>(s+1)); dp[0][0] = 0; for(int i = 1;i <= s;++i){ dp[i] = dp[i-1]; for(int j = i; j <= s ; j+=i){ ll v = 0; ll used = j/i; for(int k = 0;k < a[i].size();++k){ if(!used)break; v += a[i][k].fs * min(used,a[i][k].sc); used -= min(used,a[i][k].sc); } if(used > 0)break; for(int k = s;k >= j;--k){ if(dp[i - 1][k - j] != -1)dp[i][k] = max(dp[i][k],dp[i-1][k - j] + v); } } } ll mx = 0; for(int i = 1;i<=s;++i)mx = max(mx,dp[s][i]); cout << mx << endl; }
#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...