Advertisement
mickypinata

PROG-T1093: Book

Nov 7th, 2021
840
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.76 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long lli;
  5.  
  6. const int N = 2000;
  7.  
  8. int n, arr[N + 1], dp[N + 1][N + 1];
  9.  
  10. int dpTD(int i, int s){
  11.     if(i == n + 1){
  12.         return s == 0 ? 0 : -1e9;
  13.     }
  14.     if(dp[i][s] != -2e9){
  15.         return dp[i][s];
  16.     }
  17.     int mx = arr[i] + dpTD(i + 1, s + 1);
  18.     if(s >= 2){
  19.         mx = max(mx, -arr[i] + dpTD(i + 1, s - 2));
  20.     } else if(s == 0){
  21.         mx = max(mx, dpTD(i + 1, s));
  22.     }
  23.     return dp[i][s] = mx;
  24. }
  25.  
  26. int main(){
  27.  
  28.     scanf("%d", &n);
  29.     for(int i = 1; i <= n; ++i){
  30.         scanf("%d", &arr[i]);
  31.     }
  32.     for(int i = 1; i <= n; ++i){
  33.         for(int s = 0; s <= n; ++s){
  34.             dp[i][s] = -2e9;
  35.         }
  36.     }
  37.     cout << dpTD(1, 0);
  38.  
  39.     return 0;
  40. }
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement