Cod sursa(job #1217962)

Utilizator MaarcellKurt Godel Maarcell Data 8 august 2014 23:37:02
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <iostream>
#define INF (1<<30)
using namespace std;

int N, W, dp[1050][5050], E[1010], C[1010];
/*
int solve(int item, int energy){
    if (item==0 && energy>0)
        return INF;

    if (energy <=0)
        return 0;

    if (viz[item][energy])
        return dp[item][energy];

    viz[item][energy]=1;
    int x=solve(item-1,energy);
    int y=solve(item-1,energy-E[item])+C[item];
    dp[item][energy]=min(x,y);
    return dp[item][energy];
}
*/
int main(){
    ifstream in("energii.in");
    ofstream out("energii.out");
    in >> N >> W;

    int i,j,aux;
    for (i=1; i<=N; i++)
        in >> E[i] >> C[i];

    for (i=1; i<=N; i++)
        for (j=1; j<=W; j++)
            dp[i][j]=INF;
    for (i=1; i<=W; i++)
        dp[0][i]=INF;

    for (i=1; i<=N; i++){

        for (j=0; j<=W; j++){
            dp[i][j]=dp[i-1][j];
            if (j-E[i]<0)
                aux=0;
            else
                aux=j-E[i];

                dp[i][j]=min(dp[i][j],dp[i-1][aux]+C[i]);
        }
    }

    if (dp[N][W]==INF) dp[N][W]=-1;
    out << dp[N][W];
    return 0;
}