Cod sursa(job #930010)

Utilizator Gusti666Lucaciu Catalin Gusti666 Data 27 martie 2013 13:21:41
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("energii.in");
ofstream g("energii.out");
# define infinit 1<<30
int i,n,j,Emax,energie[1005],cost[1005],dp[1005][1005];
int main() {

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

    //dp[i][j] = costul minim repornirii centralei utilizand o submultime
    //dintre primele i generatoare astfel incat
    // energia unei submultimi dintre primele i generatoare sa fie >=j

    for(j=0;j<=Emax;j++) dp[0][j]=infinit;
    dp[0][0]=0;
    for(i=1; i<=n; i++)
        for(j=0; j<=Emax; j++) {
            dp[i][j] = dp[i-1][j];
            if(energie[i]>j)dp[i][j]=min(dp[i][j],cost[i]); // daca energie obiectului meu e mai mare
            //decat j atunci
            if(energie[i]<=j) dp[i][j]=min(dp[i][j],dp[i-1][j-energie[i]]+cost[i]);

        }
        if(dp[n][Emax]==infinit) g<<-1;
        else g<<dp[n][Emax];


    return 0;
}