Cod sursa(job #692842)

Utilizator marinutzacatana marina marinutza Data 26 februarie 2012 20:03:40
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
using namespace std;
int n,w,a[3][5010],e[1010],p[1010],sum,i,j;
int min(int a,int b)
{
	if(a<b)
	{
		return a;
	}
	else
	{
		if(b==0)
		{
			return a;
		}
		else
		{
			return b;
		}
	}
}
int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%d%d",&n,&w);
	for(i=1;i<=n;i++)
	{
		scanf("%d%d",&e[i],&p[i]);
		sum+=e[i];
	}
	if(sum<w)
		printf("%d",-1);
	else
	{
		for(i=1;i<=e[1];i++)
		{
			a[1][i]=p[1];
		}
		for(i=2;i<=n;i++)
		{
			for(j=1;j<=w;j++)
			{
				if(j-e[i]<1)
				{
					a[i%2][j]=min(p[i],a[(i-1)%2][j]);
				}
				else
				{
					a[i%2][j]=min(a[(i-1)%2][j-e[i]]+p[i],a[(i-1)%2][j]);
					if(a[i%2][j]<j)
					{
						a[i%2][j]=0;
					}
				}
			}
		}
	}
	printf("%d",a[n%2][w]);
	return 0;
}