Cod sursa(job #130254)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 31 ianuarie 2008 18:08:18
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<cstdio>     
 #include<cstring>  
   
 using namespace std;  
   
 #define FIN "energii.in"  
 #define FOUT "energii.out"  
 #define MAX_N 10005     
 #define INF 0x3f3f3f3f     
   
 int G, W, i;  
 int A[MAX_N];  
 int E[MAX_N];  
 int C[MAX_N];  
      
     
     void ks()     
     {     
         int i, j;  
         int BEST = INF;  
         memset (A, INF, sizeof (A));     
         A[0] = 0;  
   
         for(i = 1; i <= G; ++i)     
            for(j = W; j >= 0; --j)     
               if(A[j] < INF)     
               {     
                   if(W <= j + E[i] && A[j] + C[i] < BEST) BEST = A[j] + C[i];     
                   if(j + E[i] < W && A[j] + C[i] < A[j + E[i]]) A[j + E[i]] = A[j] + C[i];     
               }     
         if (BEST != INF) printf ("%d\n", BEST); else printf ("-1\n");  
     }  
          
     int main()     
     {     
         freopen(FIN, "r", stdin);     
         freopen(FOUT, "w", stdout);     
       
         scanf("%d %d", &G, &W);     
         for(i = 1; i <= G; ++i)     
             scanf("%d %d",E + i, C + i);     
       
         ks();     
           
         return 0;     
     }