Cod sursa(job #693027)

Utilizator marinutzacatana marina marinutza Data 26 februarie 2012 23:33:28
Problema Energii Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
using namespace std;
int n,w,a[3][5010],e[1010],p[1010],sum[1010],i,j;
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[i]=sum[i-1]+e[i];
	}
	if(sum[n]<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(e[i]>=j)
				{
					if(p[i]>a[(i-1)%2][j])
						a[i%2][j]=a[(i-1)%2][j];
					else
						a[i%2][j]=p[i];
					if(a[i%2][j]==0)
						a[i%2][j]=p[i];
				}
				else
				{
					if(a[(i-1)%2][j]<a[(i-1)%2][j-e[i]]+p[i])
						a[i%2][j]=a[(i-1)%2][j];
					else
						a[i%2][j]=a[(i-1)%2][j-e[i]]+p[i];
					if(a[i%2][j]==0)
						a[i%2][j]=a[(i-1)%2][j-e[i]]+p[i];
					if(sum[i]<j)
						a[i%2][j]=0;
				}
			}
		}
	}
	printf("%d",a[n%2][w]);
	return 0;
}