제출 #1311715

#제출 시각아이디문제언어결과실행 시간메모리
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...