Cod sursa(job #372034)

Utilizator andreiosxpantherHalalai Tudor Andrei andreiosxpanther Data 8 decembrie 2009 11:49:21
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>
#define GMAX 1001 
#define WMAX 5001<<1 
#define MIN 1<<30 
#define FIN "energii.in" 
#define FOUT "energii.out" 
using namespace std; 
int W,G[WMAX],C[WMAX],REZ[WMAX],u[WMAX],i,j,n,total; 
int main() 
  
{freopen(FIN,"r",stdin); 
    
freopen(FOUT,"w",stdout); 
    
scanf("%d %d",&n,&W); 
    
for(i=1;i<=n;i++) {scanf("%d %d",&G[i],&C[i]);} 
    
for(i=0;i<=2*W;i++) REZ[i]=MIN; 
    
REZ[0]=0; 
    
u[0]=1; 
    
for(i=1;i<=n;i++) 
        
for(j=W;j>=0;j--) 
                  
{ if(u[j] && REZ[j]+C[i]<REZ[j+G[i]]) {u[j+G[i]]=1;REZ[j+G[i]]=REZ[j]+C[i];} 
               
if(j+G[i]>total) total=j+G[i];} 
    
int minim=MIN; 
    
for(i=total;i>=W;i--) 
    
if(REZ[i]<minim) minim=REZ[i]; 
    
if(minim==MIN) printf("-1\n"); 
    
else printf("%d\n",minim);    
return 0;}