Cod sursa(job #678536)

Utilizator PatrunjelFMIAnita Liviu Patrunjel Data 11 februarie 2012 21:40:49
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<fstream>
#include<iostream>
using namespace std;

ifstream fin("energii.in");
ofstream fout("energii.out");

int W,G,C[1002],E[1002],cost[1002][5002];
int const maxim=32000000;

void cit(){
    int i;
    fin>>G>>W;
    for(i=1;i<=G;i++){
        fin>>E[i]>>C[i];
        if(E[i]>W)  E[i]=W;
    }

    for(i=1;i<=W;i++)   cost[0][i]=maxim;
}

void calc(){
    int i,j;
    for(i=1;i<=G;i++)
        for(j=1;j<=W;j++){
            if(E[i]<=j){
                if(cost[i-1][j-E[i]] + C[i] < cost[i-1][j])
                    cost[i][j]=cost[i-1][j-E[i]] + C[i];
                else    cost[i][j]=cost[i-1][j];
                if(cost[i-1][j-E[i]]==maxim)    cost[i][j]=C[i];
            }
            else    cost[i][j]=cost[i-1][j];
        }
}

int main(){
    cit();
    calc();
    if(cost[G][W] != maxim) fout<<cost[G][W]<<endl;
    else    fout<<-1;
    return 0;
}