Cod sursa(job #2195)

Utilizator RazvanSSavu Razvan RazvanS Data 16 decembrie 2006 11:41:28
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>

#define Nmax 5005
#define MAX 999999999

using namespace std;

ofstream fout("energii.out");
/*

void show(int V[], int W, int min, int max)
      {int i;
       for(i=0; i<=W+10; i++)
           fout<<V[i]<<" ";
       fout<<" *** "<<min<<" *** "<<max<<'\n';
       }     
          
*/      
      

int main(void)
    {int V[Nmax], n, C[Nmax], W, E[Nmax];
     ifstream fin("energii.in");
     fin>>n>>W;
     int i;
     for(i=1;i<=n; i++)
        fin>>E[i]>>C[i];
     fin.close();
     V[0]=0;
     for(i=1;i<=W;i++)
        V[i]=-1;
     int min=MAX, max=0, k, m;
     int j;
     for(i=1;i<=n;++i)
         {for(j=max;j>=0;--j)
              if(V[j]!=-1) {k=E[i]+j;
                            if(k>=W) { if(V[j]+C[i]<min) min=V[j]+C[i]; }
                              else  if( V[k]==-1 || V[j]+C[i] < V[k]) V[k]=V[j]+C[i];
                                    
                                    
                        }
          if(E[i]+max>=W) max=W-1;
              else  max+=E[i];
          // show(C,W,min,max);    
         }                
     //show(C,W,min);
     if(min==MAX) { fout<<"-1\n"; fout.close(); return 0;}
     
     fout<<min<<'\n';
     
     fout.close();
     
     return 0;
}