Cod sursa(job #1093339)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 27 ianuarie 2014 21:52:04
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#include<algorithm>
#define DIM  1005
#define DIM2 5005
#define INF  100000
using namespace std;

FILE *f=fopen("energii.in","r"), *g=fopen("energii.out","w");

long int n, w, E[DIM], C[DIM], a[DIM][DIM2], sE, sC;

    // E[] = Energiile ; C[] = Costurile ; a[][] = PDul
    // sE = suma energiilor ; sC = suma costurilor

void citire(){
long int i;

    fscanf(f,"%ld\n%ld\n",&n,&w);
    for(i=1;i<=n;i++){
        fscanf(f,"%ld %ld\n",&E[i],&C[i]);
        sE+= E[i]; sC+= C[i];
    }

}

void rezolvare(){
long int i, j;

    for(i=0;i<=w;i++){a[0][i]=INF;}

    for(i=1;i<=n;i++){
        for(j=1;j<=w;j++){

            if( E[i] >= j )
                a[i][j]= min(a[i-1][j], C[i]);
            else
                a[i][j]= min(a[i-1][j], a[i-1][ j-E[i] ]+C[i] );

        }
    }

    fprintf(g,"%ld\n",a[n][w]);

}

int main(){

    citire();       if(sE< w){fprintf(g,"-1\n");    return 0;}
    rezolvare();

return 0;
}