Cod sursa(job #304140)

Utilizator yonutzTalos Ionut yonutz Data 11 aprilie 2009 00:21:29
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
 #include <cstdio>       
        
 #define GM 1010       
 #define WM 5010       
 #define inf 2000000000       
        
 long a[WM];       
 int v[WM], c[WM];       
 int g, w;       
        
 int main()       
 {       
     freopen("energii.in","r",stdin);       
    freopen("energii.out","w",stdout);       
        
     scanf("%d", &g);       
     scanf("%d", &w);       
        
     for (int i=1; i<=g; ++i)       
     scanf("%d%d", &v[i], &c[i]);       
     for (int i=1; i<=w; ++i)       
     a[i]=inf;       
     a[0]=0;       
     long min=inf;       
      
        
     for (int i=1; i<=g; ++i)         
     {         
         for (int j=w; j>=1; --j)         
         {         
             if (j+v[i]<w && a[j+v[i]]>a[j]+c[i]) a[j+v[i]]=a[j]+c[i];         
             if (j+v[i]>=w && a[j]+c[i]<min) min=a[j]+c[i];         
         }         
          
         if (v[i]>=w && c[i]<min) min=c[i];         
         if (v[i]<w && c[i]<a[v[i]]) a[v[i]]=c[i];         
     }         
        
     if (min==inf) printf("-1\n");       
     else printf("%ld\n", min);       
        
     fclose(stdin);       
     fclose(stdout);       
        
    return 0;       
 }