Cod sursa(job #1100037)

Utilizator dinu_sergiuDinu Sergiu Andrei dinu_sergiu Data 6 februarie 2014 15:51:20
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <cstdio>

using namespace std;

FILE *f, *g;

int G, W, ene[1001], cost[1001], C[1001][5001], inf;

void Citire()
{
    int i;
    fscanf(f, "%d%d", &G, &W);
    for(i=1; i<=G; i++)
        fscanf(f, "%d%d", &ene[i], &cost[i]);
}

void Initializare()
{
    int i, j;
    inf=2000000000;
    for(i=0; i<=W; i++)
        C[0][i]=inf;
    for(i=0; i<=G; i++)
        C[i][0]=inf;
}

void Sol()
{
    int i, j;
    for(i=1; i<=G; i++)
        for(j=1; j<=W; j++)
            if(ene[i]>=j)
                C[i][j]=min(cost[i], C[i-1][j]);
            else
                C[i][j]=min(C[i-1][j], cost[i]+C[i-1][j-ene[j]]);
    if(C[G][W]==inf)
        C[G][W]=-1;
}

void Afisare()
{
    fprintf(g, "%d", C[G][W]);
}

int main()
{
    f=fopen("energii.in", "r");
    g=fopen("energii.out", "w");

    Citire();
    Initializare();
    Sol();
    Afisare();
    fclose(f);
    fclose(g);
    return 0;
}