Cod sursa(job #820628)

Utilizator gegeadDragos Gegea gegead Data 21 noiembrie 2012 08:30:56
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<cstdio>
#include<cstring>
int a[10001],b[10001];
struct obiect
{
	int g;
	int p;
};
obiect v[5001];



int maxx(int a,int b)
{
	if(a>b)
		return a;
	return b;
}




int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	int n,i,j,g,ok,k;
	scanf("%d%d",&n,&g);
	for(i=1;i<=n;++i)
		scanf("%d%d",&v[i].g,&v[i].p);
	for(j=1;j<=g;++j)
		if(j<v[1].g)
			a[j]=-1;
		else
			a[j]=v[1].p;
	for(i=2;i<=n;++i)
	{
		for(j=1;j<=g;++j)
		{
			ok=0;
			for(k=1;k<=i;++k)
				if(v[k].g<=j)
				{
					ok=1;
					break;
				}
			if(ok)
			{
				if(a[j-v[i].g]==-1)
					b[j]=a[j];
				else
					b[j]=maxx(a[j],a[j-v[i].g]+v[i].p);
			}
			else
				b[j]=-1;
		}
		memcpy(a,b,sizeof(a));
	}
	printf("%d",b[g]);
	return 0;
}