Alex_tz307

USACO 2016 US Open Contest, Gold Problem 3. 248

Sep 30th, 2021
1,452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.88 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("problem248.in");
  6. ofstream fout("problem248.out");
  7.  
  8. const int MAXN = 250;
  9. int dp[MAXN][MAXN];
  10.  
  11. void max_self(int &x, int y) {
  12.   if (x < y) {
  13.     x = y;
  14.   }
  15. }
  16.  
  17. void test_case() {
  18.   int n;
  19.   fin >> n;
  20.   int ans = 0;
  21.   for (int i = 1; i <= n; ++i) {
  22.     fin >> dp[i][i];
  23.     max_self(ans, dp[i][i]);
  24.   }
  25.   for (int len = 2; len <= n; ++len) {
  26.     for (int i = 1; i + len - 1 <= n; ++i) {
  27.       int j = i + len - 1;
  28.       dp[i][j] = -1;
  29.       for (int k = i; k <= j - 1; ++k) {
  30.         if (dp[i][k] == dp[k + 1][j] && dp[i][k] >= 0) {
  31.           max_self(dp[i][j], dp[i][k] + 1);
  32.         }
  33.       }
  34.       max_self(ans, dp[i][j]);
  35.     }
  36.   }
  37.   fout << ans << '\n';
  38. }
  39.  
  40. int main() {
  41.   int t = 1;
  42.   for (int tc = 1; tc <= t; ++tc) {
  43.     test_case();
  44.   }
  45.   fin.close();
  46.   fout.close();
  47.   return 0;
  48. }
  49.  
Advertisement
Add Comment
Please, Sign In to add comment