#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5000;
int dp[MAXN + 1][MAXN + 1] , a[MAXN + 1] , b[MAXN + 1];
map< int , int >f;
int main() {
int n , i , j , maxi , len , l , r;
cin >> n;
for( i = 1 ; i <= n ; i++ )
cin >> a[i];
for( i = 1 ; i <= n ; i++ )
cin >> b[i];
maxi = 0;
// dp[l][r] - maximul
for( i = 1 ; i <= n ; i++ ) {
maxi = 0;
for( j = i ; j <= n ; j++ ) {
maxi = max( maxi , a[j] );
f[b[j]]++;
dp[i][j] = f[maxi];
}
f.clear();
}
for( len = 2 ; len <= n ; len++ )
for( i = 1 ; i <= n - len + 1 ; i++ ) {
l = i;
r = i + len - 1;
//cout << l << ' ' << r << ' ' << dp[l][r] << '\n';
for( j = l ; j <= r ; j++ ) {
if( j != l )
dp[l][r] = max( dp[l][r] , dp[l][j - 1] + dp[j][r] );
if( j != r )
dp[l][r] = max( dp[l][r] , dp[l][j] + dp[j + 1][r] );
}
}
cout << dp[1][n] << '\n';
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |