제출 #1328740

#제출 시각아이디문제언어결과실행 시간메모리
1328740sanoFeast (NOI19_feast)C++20
59 / 100
1096 ms24220 KiB
// Source: https://usaco.guide/general/io
#include <iostream>  // cin, cout
#include <vector>    // vector
#include <string>    // string
#include <set>
#include <queue>
#include <fstream>
#include <unordered_map>
#include <map>
#define vec vector
#define NEK 1000000000000000000
#define For(i,n) for(ll i = 0; i < n; i++)
#define ll long long
#define pii pair<int,int>
#define int ll
#define mod 998244353
using namespace std;

void solve() {
    
    int n, k;
    cin >> n >> k;
    vec<int> a(n);
    For(i, n) cin >> a[i];
    vec<vec<vec<int>>> dp(2, vec<vec<int>>(k+1, vec<int>(2, 0)));
    int now = n % 2;
    for(int i = n-1; i>=0; i--) {
        now = 1 - now;
        int last = 1 - now;
        For(j, k+1) {
            //riesime dp[i][j][0]
            //skipneme
            dp[now][j][0] = dp[now][j][1] = 0;
            dp[now][j][0] = max(dp[now][j][0], dp[last][j][0]);
            //neskipneme
            if(j != 0){
                dp[now][j][0] = max(dp[now][j][0], dp[last][j-1][1] + a[i]);
            }
            //riesime dp[i][j][1]
            //skipneme
            dp[now][j][1] = max(dp[now][j][1], dp[last][j][0]);
            //neskipneme
            dp[now][j][1] = max(dp[now][j][1], dp[last][j][1] + a[i]);
        }
    }
    //dp[i][j][0/1] som na itom policku, este mozem spravit j usekov, a predomnou niekto je/neni 1/0
    cout << dp[0][k][0] << endl;
    return;
}

signed main() {
    int t; t = 1;
    while(t--) solve();
    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...
#Verdict Execution timeMemoryGrader output
Fetching results...