Submission #1323758

#TimeUsernameProblemLanguageResultExecution timeMemory
1323758namangarg5432Knapsack (NOI18_knapsack)C++20
29 / 100
2 ms3384 KiB
#include <bits/stdc++.h> using namespace std; int main() { long long n,s; cin >> s >> n; vector<long long >arr(n); vector<long long >wei(n); vector<long long >qua(n); for(long long i = 0;i < n;i++) { cin >> arr[i] >> wei[i] >> qua[i]; } vector<vector<pair<long long ,long long >>>dp(n,vector<pair<long long ,long long >>(s + 1,{0,0})); for(long long w = 0;w <= s;w++) { long long a = min(qua[0],(w/wei[0])); dp[0][w] = {a*arr[0],a}; } for(long long i = 1;i < n;i++) { for(long long w = 0;w <= s;w++) { long long take = 0; long long q = 0; if(wei[i] <= w) { q = dp[i][w - wei[i]].second; if(q < qua[i]) { take = arr[i] + dp[i][w - wei[i]].first; } else { take = arr[i] + dp[i - 1][w - wei[i]].first; q = 0; } } long long nottake = dp[i - 1][w].first; if(take > nottake) { dp[i][w] = {take,q + 1}; } else { long long q2 = 0; dp[i][w] = {nottake,q2}; } } } cout<<dp[n - 1][s].first<<endl; 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...