Submission #1193721

#TimeUsernameProblemLanguageResultExecution timeMemory
1193721repsakFeast (NOI19_feast)C++20
59 / 100
227 ms327680 KiB
// https://oj.uz/problem/view/NOI19_feast
// O(N*K) solution

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int N, K;
vector<int> values(N);

ll slow(ll index, ll score, ll kUsed, ll inRun){
    if(kUsed > K) return 0;
    if(index == N){
        return score;
    }

    ll kInc = 1;
    if(inRun) kInc = 0;
    
    return max({
        slow(index + 1, score, kUsed, 0),
        slow(index + 1, score + values[index], kUsed + kInc, 1)
    });
}

ll solve(int N, int K){
    ll MAX = 1e18;
    vector<vector<vector<ll>>> score(N, vector<vector<ll>>(K + 1, vector<ll>(2, 0)));
    score[0][1][1] = values[0];
    // score[0][1][0] = values[0];

    ll best = 0;
    for(int i = 1; i < N; i++){
        for(int j = 0 + 1; j < K + 1; j++){
            int val = values[i];
            // l = 1 (During) 
            score[i][j][1] = max({  
                // score[i][j][1], 
                score[i - 1][j][1] + val,
                score[i - 1][j - 1][0] + val
            });

            // l = 0 (Ended)
            score[i][j][0] = max({
                // score[i][j][0],
                score[i - 1][j][1],
                score[i - 1][j][0]
            });

            best = max({
                best,
                score[i][j][1],
                score[i][j][0]
            });
        }
    }

    return best;
}

int main(){
    ios::sync_with_stdio(0); cin.tie(0);
    
    cin >> N >> K;

    values.resize(N);
    for(int i = 0; i < N; i++){
        cin >> values[i];
    }

    ll res = solve(N, K);
    cout << res;
    
    // ll a = 0; ll b = 0;

    // while(a == b){
    //     N = rand() % 10 + 2;
    //     K = rand() % 10 + 1;

    //     values.resize(N);
        
    //     for(int i = 0; i < N; i++){
    //        values[i] = rand() % 100 - rand() % 150; 
    //     }

    //     a = slow(0, 0, 0, 0);
    //     b = solve(N, K);

    //     cout << a << " = " << b << "\n";
    // }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...