Submission #1297416

#TimeUsernameProblemLanguageResultExecution timeMemory
1297416baotoan655Knapsack (NOI18_knapsack)C++20
100 / 100
39 ms3168 KiB
#include <bits/stdc++.h> #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } using namespace std; const int N = 1e5 + 5, M = 2005; int S, n; long long dp[N]; vector<pair<long long, long long>> ve[M], sus; int main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); // file("A") else file("task"); cin >> S >> n; for(int i = 1; i <= n; ++i) { int v, w, k; cin >> v >> w >> k; ve[w].emplace_back(v, k); } for(int i = 1; i <= S; ++i) { sort(ve[i].begin(), ve[i].end(), greater<pair<long long, long long>>()); int rem = S / i; for(int j = 0; j < (int)ve[i].size() && rem > 0; ++j) { int sel = min((long long)rem, ve[i][j].second); rem -= sel; while(sel--) sus.emplace_back(ve[i][j].first, i); } } for(pair<long long, long long> p : sus) { for(int i = S; i >= p.second; --i) { dp[i] = max(dp[i], dp[i - p.second] + p.first); } } cout << dp[S] << '\n'; 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...