Cod sursa(job #4244)

Utilizator be_smartellora be_smart Data 1 ianuarie 2007 18:20:38
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream.h>
#include <iostream.h>
#define N 15001
#define M 1001
int main()
{
   int G,W,E[M],C[M],v[N]={0},i,j,ult;
   long c[N]={0},minim;
   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();
   long sum=0;
   for(i=1;i<=G;i++)
    sum+=E[i];
   if(sum<W)
   {
      g<<-1; g.close();
      return 0;
   }
   ult=sum;
   for(i=1;i<=G;i++)
     for(j=ult;j>=0;j--)
     {
	  if(v[j+E[i]]!=0 && c[j+E[i]]>C[i]+c[j])
	     c[j+E[i]]=C[i]+c[j];
	  if(v[j]!=0 && v[j+E[i]]==0)
	  {
	      v[j+E[i]]=E[i];
	      c[j+E[i]]=c[j]+C[i];
	  }
     }

   j=W;
   while(v[j]==0) j++;
   minim=c[j];
   for(i=j+1;i<=sum;i++)
     if(c[i]<minim)
       minim=c[i];
   g<<minim;
   g.close();
   return 0;
}