Submission #1123886

#TimeUsernameProblemLanguageResultExecution timeMemory
1123886AvianshFruits (NOI22_fruits)C++17
0 / 100
866 ms1114112 KiB
#include <bits/stdc++.h>

using namespace std;

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    int a[n],c[n];
    bool fix[n];
    fill(fix,fix+n,0);
    for(int &i : a){
        cin >> i;
        if(i!=-1)
            i--;
        fix[i]=1;
    }
    for(int &i : c){
        cin >> i;
    }
    int dp[n][n];
    //maxind,maxval
    int temp=0;
    for(int i = 0;i<n;i++){
        if(a[0]==-1){
            if(!fix[i]){
                temp=c[i];
            }
            dp[0][i]=temp;
        }
        else if(a[0]<=i){
            dp[0][i]=c[a[i]];
        }
        else{
            dp[0][i]=0;
        }
    }
    int prefmx[n];
    prefmx[0]=a[0];
    fill(prefmx,prefmx+n,-2);
    for(int i = 1;i<n;i++){
        prefmx[i]=max(prefmx[i],a[i]);
    }
    cout << dp[0][n-1] << " ";
    for(int i = 1;i<n;i++){
        dp[i][0]=dp[i-1][0];
        if(a[i]==-1){
            dp[i][0]=max(dp[i][0],c[0]);
        }
        if(0<prefmx[i]){
            dp[i][0]=0;
        }
        for(int mx = 1;mx<n;mx++){
            dp[i][mx]=max({dp[i-1][mx],dp[i][mx-1]});
            if(a[i]==-1&&!fix[mx]){
                dp[i][mx]=max({dp[i-1][mx],dp[i-1][mx-1]+c[mx],dp[i][mx-1]});
            }
            if(a[i]==mx){
                dp[i][mx]=max({dp[i-1][mx],dp[i-1][mx-1]+c[mx],dp[i][mx-1]});
            }
            if(mx<prefmx[i]){
                dp[i][mx]=0;
            }
        //    cout << i << " " << mx << " " << dp[i][mx] << "\n";
        }
        cout << dp[i][n-1] << " ";
    }
    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...