Cod sursa(job #770896)

Utilizator vendettaSalajan Razvan vendetta Data 24 iulie 2012 08:36:53
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("energii.in");
ofstream g("energii.out");

#define nmax 1005
#define Gmax 5005

int n, G, energie[nmax], cost[nmax], dp[nmax][Gmax];

void citeste(){

    f >> n >> G;
    for(int i=1; i<=n; i++) f >> energie[i] >> cost[i];

}

void rezolva(){

    //dp[i][j] = costul minim de a obtine j energie din primii i generatori

    for(int i=0; i<nmax; i++)
        for(int j=0; j<Gmax; j++) dp[i][j] = (1<<30);

    dp[0][0] = 0;

    for(int i=1; i<=n; i++){
        for(int j=0; j<=G; j++){
            dp[i][j] = dp[i-1][j];//nu adaug generatorul i;
            if (j >= energie[i]){//adaug generatorul i
                dp[i][j] = min(dp[i][j], dp[i-1][j-energie[i]] + cost[i]);
            }
        }
    }

    if (dp[n][G] != (1<<30) ) g << dp[n][G] << "\n";
                         else g << "-1" << "\n";

}

int main(){

    citeste();
    rezolva();

    f.close();
    g.close();

    return 0;

}