Submission #1311715

#TimeUsernameProblemLanguageResultExecution timeMemory
1311715andreidumitracheExam (eJOI20_exam)C++20
0 / 100
1097 ms59220 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...