Advertisement
mickypinata

PROG-T1148: Sushi

Aug 12th, 2020 (edited)
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. using lli = long long;
  6.  
  7. int main(){
  8.  
  9.     int len, nct, npp;
  10.     scanf("%d", &len);
  11.     scanf("%d", &nct);
  12.     scanf("%d", &npp);
  13.  
  14.     vector<int> cut(nct + 1, 0);
  15.     for(int i = 1; i <= nct; ++i){
  16.         scanf("%d", &cut[i]);
  17.     }
  18.     cut.push_back(len);
  19.     ++nct;
  20.  
  21.     vector<int> like(npp + 1, 0);
  22.     for(int i = 1; i <= npp; ++i){
  23.         scanf("%d", &like[i]);
  24.     }
  25.  
  26.     vector<vector<lli>> dp(2, vector<lli>(nct + 1, 0));
  27.     for(int i = 1; i <= npp; ++i){
  28.         int curr = i % 2;
  29.         int prev = curr ^ 1;
  30.         lli mx = -1e18;
  31.         for(int j = i; nct - j >= npp - i; ++j){
  32.             mx = max(mx, dp[prev][j - 1] - like[i] * cut[j - 1]);
  33.             dp[curr][j] = mx + like[i] * cut[j];
  34.         }
  35.     }
  36.  
  37.     cout << dp[npp % 2][nct];
  38.  
  39.     return 0;
  40. }
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement