Cod sursa(job #1670709)

Utilizator zingoTeodor Matei zingo Data 31 martie 2016 22:42:20
Problema Energii Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>

#define MAX_SIZE 100 * 1000 + 1

int RG[MAX_SIZE];

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