Cod sursa(job #403476)

Utilizator Anonymous1010Chilivercu Cristian Anonymous1010 Data 24 februarie 2010 22:56:40
Problema Energii Scor 95
Compilator cpp Status done
Runda preoji2010_contest Marime 0.87 kb
#include<stdio.h>
#define N 10000000
#define NN 15003

int n,s,smax,i,min,en[NN],a[1002][2],j,ok[NN];

int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	
	scanf("%d",&n);
	scanf("%d",&s);
	
	for(i=1;i<=n;i++)
	{
		scanf("%d %d",&a[i][0],&a[i][1]);
		smax+=a[i][0];
	}
	
	if(smax<s)
		printf("-1");
	if(smax==s)
	{
		smax=0;
		for(i=1;i<=n;i++)
			smax+=a[i][1];
		printf("%d",smax);
	}
	if(smax>s)
	{
		for(i=1;i<=NN;i++)
				en[i]=N;
		
		en[a[1][0]]=a[1][1];
		
		for(i=2;i<=n;i++)
		{		
			for(j=1;j<=s;j++)
				if(en[j]!=N&&ok[j]!=i&&en[j+a[i][0]]>en[j]+a[i][1])
				{
					en[j+a[i][0]]=en[j]+a[i][1];
					ok[j+a[i][0]]=i;
				}
			if(a[i][1]<en[a[i][0]])
				en[a[i][0]]=a[i][1];
		}
		
		min=NN;
		
		for(i=s;i<=NN;i++)
			if(min>en[i])
				min=en[i];
			
		printf("%d",min);
	}
	
	return 0;
}