Cod sursa(job #1122956)

Utilizator roby2001Sirius roby2001 Data 25 februarie 2014 21:32:34
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
/*
   Keep it Simple!
*/

#include<stdio.h>

#define MaxN 1005
#define MaxS 10055025
#define inf 10055030
#define MinV(a,b) (a<b?a:b)

int SumV;

int G,W;
int E[MaxN],C[MaxN];
int Mat[MaxS];



int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);

    scanf("%d%d",&G,&W);

    for(int i=1; i<=G; i++)
    {
        scanf("%d%d",&E[i],&C[i]);
        SumV+=E[i];
    }

      for(int j=1;j<=SumV;j++)
        Mat[j] = inf;

     for(int i=1;i<=G;i++)
       for(int j=W; j>=0; j--)
        {
             if( j + E[i] <= W )
                   Mat[j+E[i]] = MinV(Mat[j+E[i]]+C[i],Mat[j]);
            else if ( j + E[i] > W)
                   Mat[W] = MinV(Mat[W],Mat[j] + C[i]);
        }


    printf("%d",Mat[W] == inf ? -1 : Mat[W]);

}