Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 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.  
  13.     if (memo[idx][goup] > -1) return memo[idx][goup];
  14.  
  15.     int best = 0;
  16.     for (int i = idx+1; i <= N; i++) {
  17.         if (goup && V[i] >= V[idx]) {
  18.             best = max(best, dp(i, !goup) + 1);
  19.         }
  20.         else if (!goup && V[i] <= V[idx]) {
  21.             best = max(best, dp(i, !goup) + 1);
  22.         }
  23.  
  24.     }
  25.  
  26.     return memo[idx][goup] = best;
  27. }
  28.  
  29. int main() {
  30.     freopen("input.txt", "r", stdin);
  31.     //freopen("output.txt", "w", stdout);
  32.     scanf("%d%d", &N, &P);
  33.     for (int i = 1; i <= N; i++) {
  34.         scanf("%d", &V[i]);
  35.     }
  36.  
  37.     for (int i = 0; i <= N; i++) {
  38.         memo[i][0] = memo[i][1] = -1;
  39.     }
  40.  
  41.     int res = dp(0, true);
  42.     printf("%d\n", res);
  43.  
  44.     return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement