Cod sursa(job #2468053)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 5 octombrie 2019 12:17:37
Problema Energii Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <stdio.h>
#include <stdlib.h>
#define GMAX 1001
#define EMAX 5001
#define BIG 1e9
int W[GMAX],P[GMAX],profit[EMAX];
int minim(int a, int b){
    return a < b ? a : b;
}
int main()
{
    FILE *fin, *fout;
    int g,E,i,j,ans;
    fin = fopen("energii.in","r");
    fout = fopen("energii.out","w");
    fscanf(fin,"%d\n%d\n",&g,&E);
    for(i=0;i<g;i++)
        fscanf(fin,"%d %d",&P[i],&W[i]);
    for(j=1;j<=E;j++)
        profit[j] = -1;
    ans = BIG;
    for(i=0;i<g;i++)
        for(j=E;j>=0;j--)
            if(profit[j]!=-1){
                if(j+P[i] >= E){
                    if(profit[E] == -1)
                        profit[E] = profit[j]+W[i];
                    else
                        profit[E] = minim(profit[E],profit[j]+W[i]);
                    ans = minim(ans, profit[E]);
                }
                else{
                    if(profit[j+P[i]] == -1)
                        profit[j+P[i]] = profit[j] + W[i];
                    else
                        profit[j+P[i]] = minim(profit[j+P[i]],profit[j]+W[i]);
                }
            }
    if(ans == BIG)
        fprintf(fout,"-1");
    else
        fprintf(fout,"%d",ans);
    fclose(fin);
    fclose(fout);
    return 0;
}