Cod sursa(job #253179)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 15:19:36
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
 #include <stdio.h>          
 #define gmax 1005     
 #define wmax 5005     
 #define inf 10000000     
     
 struct nimic     
 {     
     int e, c;     
 };     
     
 int g, w, min=inf;     
 nimic G [gmax], poz [wmax];     
     
 void scan ()     
 {     
     int i;     
     scanf ("%d%d", &g, &w);     
     for (i=1; i<=g; ++i)     
         scanf ("%d%d", &G [i].e, &G [i].c);     
     
 }     
     
 void init ()     
 {     
     int i;     
     for (i=1; i<=w; ++i)     
         poz [i].c=inf;     
 }     
     
 inline int minim (int a, int b)     
 {     
     if (a < b)     
         return a;     
     return b;     
 }     
     
 void sume ()     
 {     
     int i, j, a;     
     poz [0].e=1;     
     poz [0].c=0;     
     init ();     
     for (i=1; i<=g; ++i)     
         for (j=w; j>=0; --j)     
             if (poz [j].e != 0)     
             {     
                 a=j+G [i].e;     
                 if (a >= w)     
                 {     
                     if (min > poz [j].c+G[i].c)     
                         min=poz [j].c+G [i].c;     
                 }     
                 else    
                 {     
                     poz [a].c=minim (poz [a].c, poz [j].c+G [i].c);     
                     poz [a].e=1;     
                 }     
             }     
                  
 }     
     
 int main ()     
 {     
     freopen ("energii.in", "r", stdin);     
     freopen ("energii.out", "w", stdout);     
     scan ();     
     sume ();     
     if (min < inf)     
         printf ("%d\n", min);     
     else    
         printf ("-1");     
     return 0;     
 }