Guest User

Untitled

a guest
Jul 29th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <algorithm>
  3. #define MAXN 250010
  4. using namespace std;
  5.  
  6. int N, P;
  7. int V[MAXN];
  8. int memo[MAXN][2];
  9.  
  10. int dp(int idx, bool goup) {
  11.     if (idx > N) return 0;
  12.     if (V[idx] == V[idx+1]) return dp(idx+1, goup) + 1;
  13.  
  14.     if (memo[idx][goup] > -1) return memo[idx][goup];
  15.  
  16.     int best = 0;
  17.     for (int i = idx+1; i <= N; i++) {
  18.         if (goup && V[i] > V[idx]) {
  19.             best = max(best, dp(i, !goup) + 1);
  20.         }
  21.         else if (!goup && V[i] < V[idx]) {
  22.             best = max(best, dp(i, !goup) + 1);
  23.         }
  24.  
  25.     }
  26.  
  27.     return memo[idx][goup] = best;
  28. }
  29.  
  30. int main() {
  31.     freopen("input.txt", "r", stdin);
  32.     //freopen("output.txt", "w", stdout);
  33.     scanf("%d%d", &N, &P);
  34.     for (int i = 1; i <= N; i++) {
  35.         scanf("%d", &V[i]);
  36.     }
  37.  
  38.     for (int i = 0; i <= N; i++) {
  39.         memo[i][0] = memo[i][1] = -1;
  40.     }
  41.  
  42.     int res = dp(0, true);
  43.     printf("%d\n", res);
  44.  
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment