Submission #1274654

#TimeUsernameProblemLanguageResultExecution timeMemory
1274654rafsanamin2020Knapsack (NOI18_knapsack)C++20
100 / 100
98 ms33728 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; ll MOD = 1E9 + 7, MX = 1E6 + 2; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); // int T; // cin >> T; // for (int t = 1; t <= T; t++) // { int S, N; cin >> S >> N; vector<int> V(N); vector<int> R(N); vector<int> K(N); vector<vector<int>> group_by_gas_req(S + 1); for (int i = 0; i < N; i++) { cin >> R[i] >> V[i] >> K[i]; group_by_gas_req[V[i]].push_back(i); } vector<vector<ll>> dp(S + 1, vector<ll>(S + 1, 0)); auto compare = [&R](int a, int b) { return R[a] > R[b]; }; for (int i = 1; i <= S; i++) { sort(group_by_gas_req[i].begin(), group_by_gas_req[i].end(), compare); // reverse(group_by_gas_req[i].begin(), group_by_gas_req[i].end()); // for (int x : (group_by_gas_req[i])) // { // cout << R[x] << " "; // } // cout << "\n"; for (int j = 1; j <= S; j++) { ll k_maximum = S / i, val = 0, cumulative_k = 1; int k = 1, l = 0; while (k_maximum > 0 && l < group_by_gas_req[i].size()) { val += (R[group_by_gas_req[i][l]]); // cout << i << " " << j << " " << max(dp[i - 1][j - min(j, k * i)] + (((k * i) <= j) ? val : 0), dp[i - 1][j]) << "\n"; dp[i][j] = max(max(dp[i - 1][j - min((ll)j, cumulative_k * i)] + (((cumulative_k * i) <= j) ? val : 0), dp[i - 1][j]), dp[i][j]); k++; cumulative_k++; k_maximum--; if (k > K[group_by_gas_req[i][l]]) { k = 1; l++; } } dp[i][j] = max(dp[i - 1][j], dp[i][j]); } } // for (int i = 1; i < S; i++) // { // for (int j = 1; j < S; j++) // { // cout << dp[i][j] << " "; // } // cout << "\n"; // // } // } cout << dp[S][S] << "\n"; }
#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...