Cod sursa(job #43687)

Utilizator lucibitLucian Onea lucibit Data 30 martie 2007 13:33:25
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
#define maxN 1001
#define maxW 5001
#define inf 10000001
long W,N,E[maxN],C[maxN],c1[maxW],MIN,c2[maxW];


int main ()
{long i,j;
 freopen("energii.out","w",stdout);
 freopen("energii.in","r",stdin);
 scanf("%ld\n%ld\n",&N,&W);
 for(i=1;i<=W;i++) c1[i]=inf;
 MIN=0;
 for(i=1;i<=N;i++)
  {scanf("%ld %ld\n",&E[i],&C[i]);
	 MIN+=E[i];

	 }

if(MIN<W) printf("-1\n");
 else
 {for(i=1;i<=N;i++)
	 { for(j=0;j<=W;j++)
		c2[j]=c1[j];
		for(j=0;j<=W;j++)
		 if(j+E[i]>W){ if((c1[W]>c1[j]+C[i]) && (c2[W]>c1[j]+C[i])) c2[W]=c1[j]+C[i];}
			 else if((c1[j+E[i]]>c1[j]+C[i]) && (c2[j+E[i]]>c1[j]+C[i] )) c2[j+E[i]]=c1[j]+C[i];
		for(j=1;j<=W;j++)
		c1[j]=c2[j];
		 }
	printf("%ld\n",c2[W]);
	 }

return 0;}