Cod sursa(job #470390)

Utilizator Anonymous1010Chilivercu Cristian Anonymous1010 Data 13 iulie 2010 17:35:56
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>

int n,m,a[2000],b[2000],c[17000],min,i,j,s1,s2;

int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	
	scanf("%d",&n);
	scanf("%d",&m);
	
	min=100000000;
	
	for(i=1;i<=n;i++)
	{
		scanf("%d %d",&a[i],&b[i]);
		s1+=a[i];
		s2+=b[i];
	}
	
	if(s1<m)
		printf("-1");
	if(s1==m)
		printf("%d",s2);
	if(s1>m)
	{
		c[0]=1;
		
		for(i=1;i<=n;i++)
			for(j=m;j>=0;j--)
				if(c[j])
				{
					if(c[j+a[i]])
					{
						if(c[j+a[i]]>c[j]+b[i])
						{
							c[j+a[i]]=c[j]+b[i];
							if(j+a[i]>=m&&c[j+a[i]]<min)
								min=c[j+a[i]];
						}
					}
					else
					{
						c[j+a[i]]=c[j]+b[i];
						if(j+a[i]>=m&&c[j+a[i]]<min)
							min=c[j+a[i]];
					}
				}
				
		printf("%d",min-1);
	}
	
	return 0;
}