Cod sursa(job #1673926)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 4 aprilie 2016 11:16:56
Problema Energii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>

#define en_MAX 5001
#define INF 2000000000

int RG[en_MAX];

int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    int G,W,ce,cc,k,i,j;
    scanf("%d\n%d\n",&G,&W);
    for(i = 1; i < en_MAX; ++i)
        RG[i] = INF;
    for(k = 1; k <= G; ++k)
    {
        scanf("%d %d",&ce,&cc);
        for(i = W; i >= 1; --i)
        {
                if(RG[i] > 0){
                    if(i + ce >= W && RG[i] + cc < RG[W])
                        RG[W] = RG[i] + cc;
                    else
                        if(RG[i] + cc < RG[i + ce] || RG[i + ce] == 0)
                                RG[i + ce] =  RG[i] + cc;
                }
        }
            if(RG[ce] > cc || RG[ce] == 0)
                RG[ce] = cc;
    }
    if(RG[W] == INF)
        printf("-1\n");
    else
        printf("%d\n",RG[W]);
    return 0;
}