Problemi con Partita

Ciao, stavo cercando di risolvere il problema Partita su Terry, penso si debba risolvere con la DP però non riesco a pensare a nessun approccio risolutivo. Qualcuno riesce a darmi qualche hint?

Questo non è decisamente un problema di DP.
Prova a pensare a dove avresti voluto prendere dei rinforzi nel momento in cui resti senza soldatini.

Non so se è questo l’approccio che volevi che io utilizzassi però ho scritto il codice seguendo il tuo ragionamento e ho ottenuto 50/50.

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

void solve(int t) {
    int N;
    int K;
    cin >> N >> K;
    vector<int> R(N);
    for (int i = 0; i < N; i++) cin >> R[i];

    int risposta = 0;
    priority_queue<int> maxK;

    for (int i = 0; i < N; i++)
    {
        if(R[i])maxK.push(R[i]);
        

        if (K == 1 && !maxK.empty())
        {
            K += maxK.top();
            risposta++;
            maxK.pop();
        }
        else if (K == 0)
        {
            risposta = -1;
            break;
        }

        K--;
    }

    cout << "Case #" << t << ": " << risposta << "\n";
}

int main() {
    // Se preferisci leggere e scrivere da file
    // ti basta decommentare le seguenti due righe:

    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

    int T;
    cin >> T;

    for (int t = 1; t <= T; t++) {
        solve(t);
    }

    return 0;
}