Submission #1219285

#TimeUsernameProblemLanguageResultExecution timeMemory
1219285spampotsKnapsack (NOI18_knapsack)C++20
100 / 100
43 ms1864 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<pii> vpii; const int MOD = 1e9 + 7; const int INF = INT_MAX; const ll LINF = LLONG_MAX; #define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL) #define pb push_back #define mp make_pair #define fi first #define se second #define all(v) v.begin(), v.end() #define rep(i, a, b) for(int i = a; i < b; ++i) void solve() { int S, N; cin >> S >> N; vector<vector<pair<int, int>>> items(S+1); for(int i = 0; i < N; ++i){ int v, w, k; cin >> v >> w >> k; if(w <= S) items[w].push_back({v, k}); } auto st = [&](pii& a, pii& b) -> bool{ if(a.fi != b.fi) return a.fi > b.fi; return a.se > b.se; }; for(int i = 1; i <= S; ++i) sort(items[i].begin(), items[i].end(), st); vector<pair<int, int>> item; // in item store the following : wt, price for(int i = 1; i <= S; ++i){ int id = 0; int itmct = S / i; while(id < (int)items[i].size() && itmct > 0){ auto [v, k] = items[i][id]; int use = min(k, itmct); for(int j = 0; j < use; ++j) item.pb({i, v}); itmct -= use; id++; } } vector<int> dp(S+1, 0); for(auto& [wt, val] : item) { for(int w = S; w >= wt; --w) { dp[w] = max(dp[w], val + dp[w - wt]); } } cout << dp[S] << endl; } int main() { fast; int t = 1; while(t--) { solve(); } 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...