제출 #751029

#제출 시각아이디문제언어결과실행 시간메모리
751029LucaLucaMExam (eJOI20_exam)C++17
0 / 100
1060 ms201524 KiB
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e5;

int n;
int a[NMAX + 5], b[NMAX + 5];
int dp[NMAX + 5];
/**
dp[i] = nr maxim pe care le putem face din primele i
=>
dp[i] = max{dp[j] + getCost(j, i) | 1 <= j <= i} =>
getCost putem calcula in O(N)
**/

int maxim[5005][5005];

int getCost (int x, int y)
{
    int ret = 0;
    for (int i=x; i<=y; i++)
        ret += (b[i] == maxim[x][y]);
    return ret;
}

int main()
{
    cin >> n;
    for (int i=1; i<=n; i++)
        cin >> a[i];
    for (int i=1; i<=n; i++)
        cin >> b[i];
    for (int i=1; i<=n; i++)
    {
        maxim[i][i] = a[i];
        for (int j=i+1; j<=n; j++)
            maxim[i][j] = max(maxim[i][j-1], a[j]);
    }
    for (int i=1; i<=n; i++)
    {
        dp[i] = getCost(1, i);
        for (int j=2; j<=i; j++)
        {
            dp[i] = max(dp[i], dp[j-1] + getCost(j, i));
        }
    }
    cout << dp[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...