Cod sursa(job #4218)

Utilizator be_smartellora be_smart Data 1 ianuarie 2007 16:10:15
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream.h>
#include <iostream.h>
#define N 20001
#define M 1001
int main()
{
   int G,W,E[M],C[M],v[N]={0},c[N]={0},i,j,l,ult;
   v[0]=-1;
   ifstream f("energii.in");
   ofstream g("energii.out");
   f>>G>>W;
   for(i=1;i<=G;i++)
   {
       f>>E[i];
       f>>C[i];
   }
   f.close();
   ult=0;
   int aux,t;
   for(i=1;i<=G;i++)
     for(j=ult;j>=0;j--)
     {
	  if(v[j+E[i]]!=0 && c[j+E[i]]>C[i])
	  {
	     aux=c[j+E[i]];
	     c[j+E[i]]=C[i];
	    for(t=j+E[i]+1;t<=ult;t++)
	     if(v[t])
	     {
	       l=t;
	       while(l-v[l]>j+E[i])
		 l-=v[l];
	       if(l==j+E[i])
	       while(l+v[l]<=t)
	       {
		  l=l+v[l];
		  c[l]=c[l]-aux+C[i];
	       }
	     }
	  }
	  if(v[j]!=0 && v[j+E[i]]==0)
	  {
	      v[j+E[i]]=E[i];
	      c[j+E[i]]=c[j]+C[i];
	      if(j+E[i]>ult)
		ult=j+E[i];
	  }
	  if(ult>=W)
	   if(c[W])
	   { g<<c[W]; return 0;}
	   else
	   {
	      l=W;
	      while(!c[l])
	       l++;
	      g<<c[l];
	      return 0;
	   }
     }
   g<<-1;
   g.close();
   return 0;
}