Cod sursa(job #1093300)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 27 ianuarie 2014 21:39:15
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<cstdio>
#include<cstring>
int n,w,e[10500],c[10500],x[10500],y[10500],se,sc,i,j,emin,cmin;
FILE *f,*g;
int minim(int a,int b){
    if(a>b)
        return b;
    return a;
}
int main(){
    f=fopen("energii.in","r");
    g=fopen("energii.out","w");
    fscanf(f,"%d%d",&n,&w);
    for(i=1;i<=n;i++){
        fscanf(f,"%d%d",&e[i],&c[i]);
        se+=e[i];
        sc+=c[i];
    }
    if(se<w)
        fprintf(g,"-1");
    else if(se==w)
        fprintf(g,"%d",sc);
    else{
        if(se>10000)
            se=10000;
        for(i=0;i<=se;i++){
            y[i]=sc;
        }
        y[e[1]]=c[1];
        for(i=1;i<=n;i++){
        memcpy(x,y,sizeof(y));
            for(j=0;j<=se;j++){
                if(j>e[i])
                    y[j]=minim(x[j],x[j-e[i]]+c[i]);
                else if(j==e[i])
                    y[j]=minim(x[j],c[i]);
                else
                    y[j]=x[j];
            }
        }
        emin=sc;
        for(i=w;i<=se;i++){
            if(y[i]<emin)
                emin=y[i];
        }
        fprintf(g,"%d",emin);
    }


    fclose(f);
    fclose(g);
    return 0;
}