Sergey101

Q3

Jan 30th, 2025
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. typedef int_fast64_t lli;
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     ios_base::sync_with_stdio(false);
  8.     cin.tie(nullptr);
  9.     cout.tie(nullptr);
  10.  
  11.     lli C;
  12.     cin >> C;
  13.  
  14.     lli Pf, Lf, Ps, Ls;
  15.     cin >> Pf >> Lf;
  16.     cin >> Ps >> Ls;
  17.  
  18.     lli N;
  19.     cin >> N;
  20.  
  21.     function<lli(lli, vector<pair<lli, lli>>&)> knapsack = [](lli capacity, vector<pair<lli, lli>>& items)
  22.     {
  23.         vector<lli> dp(capacity + 1, 0);
  24.         for(auto& item : items)
  25.         {
  26.             lli weight = item.first;
  27.             lli value = item.second;
  28.             for(lli j = capacity; j >= weight; j--)
  29.             {
  30.                 if(dp[j - weight] + value > dp[j])
  31.                 {
  32.                     dp[j] = dp[j - weight] + value;
  33.                 }
  34.             }
  35.         }
  36.         return *max_element(dp.begin(), dp.end());
  37.     };
  38.  
  39.     vector<tuple<lli, lli, lli>> items;
  40.     for(lli i = 0; i < N; i++)
  41.     {
  42.         lli Vi, Ri, Wi;
  43.         cin >> Vi >> Ri >> Wi;
  44.         items.emplace_back(Vi, Ri, Wi);
  45.     }
  46.  
  47.     vector<pair<lli, lli>> fast_items;
  48.     for(auto& item : items)
  49.     {
  50.         lli Vi = get<0>(item);
  51.         lli Ri = get<1>(item);
  52.         lli Wi = get<2>(item);
  53.         lli adjusted = Vi + Ri * Lf;
  54.         if(adjusted > 0 && Wi <= C)
  55.         {
  56.             fast_items.emplace_back(Wi, adjusted);
  57.         }
  58.     }
  59.     lli max_fast = knapsack(C, fast_items);
  60.     lli profit_fast = max_fast - Pf;
  61.  
  62.     vector<pair<lli, lli>> slow_items;
  63.     for(auto& item : items)
  64.     {
  65.         lli Vi = get<0>(item);
  66.         lli Ri = get<1>(item);
  67.         lli Wi = get<2>(item);
  68.         lli adjusted = Vi + Ri * Ls;
  69.         if(adjusted > 0 && Wi <= C)
  70.         {
  71.             slow_items.emplace_back(Wi, adjusted);
  72.         }
  73.     }
  74.     lli max_slow = knapsack(C, slow_items);
  75.     lli profit_slow = max_slow - Ps;
  76.  
  77.     cout << max(profit_fast, profit_slow) << "\n";
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment