Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int a[55];
  6. int dp[51][51][51][51];
  7.  
  8. int main(){
  9.     ios_base::sync_with_stdio(0);cin.tie(0);
  10.    
  11.     int n;
  12.     cin >> n;
  13.     for(int i = 1; i <= n; i++){
  14.         cin >> a[i];
  15.         for(int k = 1; k <= 50; k++)
  16.             for(int l = k; l <= 50; l++)
  17.                 if(k <= a[i] && l >= a[i])
  18.                     dp[i][i][k][l] = 1;
  19.     }
  20.     for(int dl = 2; dl <= n; dl++)
  21.         for(int i = 1; i <= n - dl + 1; i++){
  22.             int j = i + dl - 1;
  23.             for(int k = 1; k <= 50; k++)
  24.                 for(int l = k; l <= 50; l++){
  25.                     if(a[i] <= k)
  26.                         dp[i][j][a[i]][l] = max(dp[i][j][a[i]][l],dp[i + 1][j][k][l] + 1);
  27.                     else
  28.                         dp[i][j][a[i]][l] = max(dp[i][j][a[i]][l],dp[i + 1][j][k][l]);
  29.                     if(a[j] >= l)
  30.                         dp[i][j][k][a[j]] = max(dp[i][j][k][a[j]],dp[i][j - 1][k][l] + 1);
  31.                     else
  32.                         dp[i][j][k][a[j]] = max(dp[i][j][k][a[j]],dp[i][j - 1][k][l]);
  33.                     if(a[j] <= k && a[i] >= l && a[j] <= a[i])
  34.                         dp[i][j][a[j]][a[i]] = max(dp[i][j][a[j]][a[i]],dp[i + 1][j - 1][k][l] + 2);
  35.                 }
  36.         }
  37.     int ans = 0;
  38.     for(int i = 1; i <= 50; i++)
  39.         for(int j = 1; j <= 50; j++)
  40.             ans = max(ans,dp[1][n][i][j]);
  41.     cout << ans;
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement