#37975: 請問是哪裡出錯了 65%


oliverho0214@gmail.com (123)

學校 : 不指定學校
編號 : 210608
來源 : [36.228.245.204]
最後登入時間 :
2022-10-09 23:19:41
g278. 4. 美食博覽會 -- 2021年9月APCS | From: [36.228.235.58] | 發表日期 : 2023-10-21 20:40

#include<bits/stdc++.h>

using namespace std;

main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);


    int n,k;

    cin>>n>>k;

    vector<int> data(n);

    for(int& i:data){
        cin>>i;
    }

    vector<long long> dp(n);
    unordered_map<long long,int> same;
    int ind=0;
    dp[0] = 1;
    same[dp[0]]=0;


    for(int i=1;i<n;i++){
        auto iter = same.find(data[i]);
        if(iter==same.end()){
            same[data[i]]=i;
            dp[i] = dp[i-1]+1;
        }
        else{
            int f = iter->second;
            for(;ind<=f;ind++){
                same.erase(data[ind]);
            }
            same[data[i]]=i;
            dp[i] = same.size();

        }
    }

    vector<vector<long long>> DP(k,vector<long long>(n));

    for(int i=0;i<k;i++){
        DP[i][0] = 1;
    }

    long long M=0;
    for(int i=0;i<n;i++){
        if(dp[i]>M){
            M=dp[i];
        }

        DP[0][i] = M;

    }


    for(int i=1;i<k;i++){
        for(int j=1;j<n;j++){

            long long choose = dp[j];
            if(j-dp[j]>=0){
                choose+=DP[i-1][j-dp[j]];
            }

            long long not_choose=DP[i][j-1];

            DP[i][j] = max(choose,not_choose);
        }
    }


    cout<<DP[k-1][n-1];

 

 

    return 0;
}

 
ZeroJudge Forum