Cod sursa(job #4497)

Utilizator hellraizerChiperi Matei hellraizer Data 4 ianuarie 2007 20:59:11
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <stdio.h>

#define N_MAX 10001
#define G_MAX 1001

int w,g,v[N_MAX],eg[G_MAX],cg[G_MAX],max;

void citire(){
        FILE *fin=fopen("energii.in","r");
        fscanf(fin,"%d",&g);
        fscanf(fin,"%d",&w);
        for (int i=1;i<=g;i++)
               fscanf(fin,"%d %d",&eg[i],&cg[i]);
        fclose(fin);
}

void prelucrare(){
        int i,j;
        max=w;
        for (i=1;i<=g;i++){
                for (j=g;j>=1;j--)
                        if(v[j]!=0) {
                                if (v[j+eg[i]]!=0)
                                        if (v[j+eg[i]]>v[j]+cg[i])
                                                v[j+eg[i]]=v[j]+cg[i];
                                        else;
                                else
                                        v[j+eg[i]]=v[j]+cg[i];
                                if (j+eg[i]>max)
                                        max=j+eg[i];
                        }
                if (v[eg[i]]!=0)
                        if (v[eg[i]]>cg[i])
                                v[eg[i]]=cg[i];
                        else;
                else{
                        v[eg[i]]=cg[i];
                        if (eg[i]>max)
                                max=eg[i];
                }
        }
}

void afisare(){
        int i,min=v[w];
        FILE *fout=fopen("energii.out","w");
        for (i=w+1;i<=max;i++)
                if (v[i]<min&&v[i]!=0)
                       min=v[i];
        if (min==0)
                fprintf(fout,"-1\n");
        else
                fprintf(fout,"%d\n",min);
        fclose(fout);
}

int main(){
        citire();
        prelucrare();
        afisare();
        return 0;
}