Cod sursa(job #3141654)

Utilizator vozian.anghelinaAnghelina Vozian vozian.anghelina Data 15 iulie 2023 12:33:54
Problema Energii Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
//https://infoarena.ro/problema/rucsac
#include <bits/stdc++.h>
using namespace std;
int n,k;

// D[i][j] costul minim pentru a strange minim j energii cu primele i generatoare

// k = generatoare
// n = energii

int main(){
    ifstream cin("energii.in");
    ofstream cout("energii.out");
    cin >> k >> n;
    int G[n+10], C[n+10], D[k+10][n+10];
    for(int i=1; i<=k; i++){
        cin >> G[i] >> C[i];
    }

    for(int i=0; i<=k; i++){
        D[i][0] = 0;
    }

    for(int i=0; i<=k; i++){
        for(int j = 1; j<=n+1;j++){
            D[i][j] = 1e9;
        }
    }


    for(int i=1; i<=k; i++){
        for(int j=n; j>=1; j--){
            if(j - G[i] >= 0){
                D[i][j] = min({D[i-1][j - G[i]] + C[i], D[i-1][j], D[i][j+1]});
            } else {
                D[i][j] = min(D[i-1][j], D[i][j+1]);
            }
        }
    }

    // for(int i=1; i<=k; i++)
    //     for(int j = 1; j<=n;j++)
    //         cout << D[i][j] << "\n "[j < n];

    if(D[k][n] != 1000000000){
        cout << D[k][n];
    } else {
        cout << '-1';
    }
}