Untitled

 avatar
unknown
plain_text
a year ago
1.3 kB
6
Indexable
#include <bits/stdc++.h>
using namespace std;

int main()
{
    // input output
    int n, k;
    cin >> n >> k;
    vector<int> A(n);
    for (int i = 0; i < n; i++) {
        cin >> A[i];
    }
    
    vector<vector<int>> dp(n, vector<int>(k+1, 0));
    for (int i = n - 1; i >= 0; i--) {
        for (int j = k; j >= 0; j--) {
            int skip = A[i] + (i+1 < n && j+1 <= k ? dp[i+1][j+1] : 0);
            int next = i+1 < n ? dp[i+1][0] : 0;
            dp[i][j] = max(skip, next);
        }
    }
    
    cout << dp[0][0] << endl;
    
    return 0;
}

/*
// #1: Recursion + memo
#include <bits/stdc++.h>
using namespace std;

int n, k;
vector<int> A;
map<pair<int, int>, int> memo;

int solve(int i, int consecutive) {
    if (i >= n) return 0;
    
    pair<int, int> key = make_pair(i, consecutive);
    if (memo.count(key)) {
        return memo[key];
    }
    
    int next = 0, skip = 0;
    if (consecutive <= k) {
        next = A[i] + solve(i + 1, consecutive + 1);
    }
    
    skip = solve(i + 1, 0);
    
    int ans = max(next, skip);
    memo[key] = ans;
    return ans;
}

int main()
{
    // input output
    cin >> n >> k;
    
    A.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> A[i];
    }
    
    int ans = solve(0, 0);
    cout << ans;
    return 0;
}
*/
Editor is loading...
Leave a Comment