Cod sursa(job #94659)

Utilizator eddieOlariu Eduard Iuliu eddie Data 24 octombrie 2007 16:17:05
Problema Energii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
int s[25001];
int main()
 {
  long int n,w;
  long int e;
  long int c;
  freopen("energii.in","r",stdin);
  freopen("energii.out","w",stdout);
  long cmin=1000000000;
  scanf("%ld %ld",&n,&w);
  register long int i;
  long int us;
  for (i=1;i<=n;i++)
      {
       scanf("%ld%ld",&e,&c);
       if (i==1)
	  {
	   us=e;
	   s[us]=c;
	  }
	else
	{
       long int j;
       long int k=us;
       for (j=us;j>=0;j--)
	  {
	   if ((s[j+e]>c+s[j])||(s[j+e]==0))
		{
		 s[j+e]=c+s[j];
		 if (k<j+e)
		    k=j+e;
		 if ((j+e>=w)&&(cmin>s[j+e]))
		    {
		     cmin=c+s[j];
		     s[w]=cmin;
		    }
		}
	    if (k<=w)
	       us=k;
	  }
	  }
      }

  if (cmin==0)
     printf("-1");
     else
     printf("%ld",cmin);
  fclose(stdout);
  return 0;
 }