Submission #543793

#TimeUsernameProblemLanguageResultExecution timeMemory
543793zammyKnapsack (NOI18_knapsack)C++17
0 / 100
97 ms262144 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int inf = INT_MAX, mod = 1e9 + 7, MAX_N = (1e5), MAX_S = 2000; int dp[MAX_N + 1][MAX_S + 1]; void solve() { memset(dp, -1, sizeof(dp)); int S, N; cin >> S >> N; vector<int> V(N + 1), W(N + 1), K(N + 1); map<int, vector<pair<int, int>>> mp; for (int i = 1; i <= N; i++) { cin >> V[i] >> W[i] >> K[i]; mp[W[i]].push_back({V[i], K[i]}); } int i = 1; for (int i = 0; i <= S; i++) dp[0][i] = 0; for (auto &[wt, items] : mp) { sort(items.rbegin(), items.rend()); for (int j = 0; j <= S; j++) { dp[i][j] = dp[i - 1][j]; int curr_item = 0, cnt = 0, curr_item_cnt = 0, profit = 0; while (curr_item < (int)items.size() && j - ((cnt + 1) * wt) >= 0 && dp[i - 1][j - ((cnt + 1) * wt)] != -1) { cnt++; profit += items[curr_item].first; dp[i][j] = max(dp[i][j], dp[i - 1][j - (cnt * wt)] + profit); if (curr_item_cnt + 1 == items[curr_item].second) curr_item++, curr_item_cnt = 0; else curr_item_cnt++; } } i++; } cout << *max_element(dp[i - 1], dp[i - 1] + S + 1) << "\n"; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout << fixed; cout << setprecision(9); int tt = 1; // cin >> tt; for (int i = 1; i <= tt; i++) { // cout << "Case #" << i << ": "; solve(); } cerr << "time taken : " << (float)clock() / CLOCKS_PER_SEC << " secs" << 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...