Advertisement
tepyotin2

Combining Ricebalss

Jul 8th, 2025
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int main() {
  7.     ios_base::sync_with_stdio(0), cin.tie(0);
  8.  
  9.     int n;
  10.     cin >> n;
  11.     vector<int> a(n);
  12.     for (int i = 0; i < n; ++i)
  13.         cin >> a[i];
  14.  
  15.     vector<vector<int>> dp(n, vector<int>(n, 0));
  16.     int max_size = 0;
  17.  
  18.     for (int i = 0; i < n; ++i) {
  19.         dp[i][i] = a[i];
  20.         max_size = max(max_size, a[i]);
  21.     }
  22.  
  23.     for (int length = 2; length <= n; ++length) {
  24.         for (int i = 0; i + length - 1 < n; ++i) {
  25.             int j = i + length - 1;
  26.  
  27.             for (int k = i; k < j; ++k) {
  28.                 if (dp[i][k] && dp[k + 1][j] && dp[i][k] == dp[k + 1][j]) {
  29.                     dp[i][j] = dp[i][k] + dp[k + 1][j];
  30.                     break;
  31.                 }
  32.             }
  33.  
  34.             for (int k1 = i; k1 < j - 1 && dp[i][j] == 0; ++k1) {
  35.                 for (int k2 = k1 + 1; k2 < j; ++k2) {
  36.                     if (dp[i][k1] && dp[k1 + 1][k2] && dp[k2 + 1][j]
  37.                         && dp[i][k1] == dp[k2 + 1][j]) {
  38.                         dp[i][j] = dp[i][k1] + dp[k1 + 1][k2] + dp[k2 + 1][j];
  39.                         break;
  40.                     }
  41.                 }
  42.             }
  43.  
  44.             max_size = max(max_size, dp[i][j]);
  45.         }
  46.     }
  47.  
  48.     cout << max_size << endl;
  49.     return 0;
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement