To maximise the minimum of k subarrays

Правка en2, от _hopefullyme, 2024-07-18 14:18:53

//Why is it giving wrong answer? For example, for {1 2 3 4 5}, and k = 2, it is outputting 9, while it should output 6 as {1 2 3 4} and {5}. Please help

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define all(v) (v).begin(), (v).end()
#define endl '\n'
#define INF (ll)1e15
#define MOD 1000000007

vector<vector<ll>> dp;
vector<ll> arr;

ll rec(int i, int k) {
    if (i == -1) {
        if (k == 0) {
            return 0;
        }
        return INT_MIN;
    }

    if (dp[i][k] != -1) {
        return dp[i][k];
    }

    ll ans = 0;
    ll mini = INT_MAX;

    if (k > 0) {
        // THE SUBPART WE ARE CREATING IS [j,i]
        for (int j = i-1; j >= -1; j--) {
            mini = min(mini,arr[j+1]);
            ans = max(ans,mini+rec(j,k-1));
        }
    }
    

    return dp[i][k] = ans;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, k;
    cin >> n >> k;
    arr.resize(n);
    for (auto &x:arr) {
        cin >> x;
    }

    dp.assign(n+5,vector<ll>(k+5,-1));

    cout << rec(n-1,k) << endl;
    
    return 0;
}

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en2 Английский _hopefullyme 2024-07-18 14:18:53 21
en1 Английский _hopefullyme 2024-07-18 14:17:12 1202 Initial revision (published)