Cod sursa(job #615234)

Utilizator moonbeamElma Moonbeam moonbeam Data 8 octombrie 2011 23:10:03
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<cstdio>
#include<bitset>
using namespace std;
#define NM 5005
#define GG 10005
#define maxim(a,b) (a>b)? (a):(b)
short int N,G;
short int g[NM],p[NM];
int rez[GG];
bitset<GG>viz;
inline void read()
{
	freopen("rucsac.in","r",stdin);
	freopen("rucsac.out","w",stdout);
	scanf("%hd%hd",&N,&G);
	for (short int i=1; i<=N; ++i)
		scanf("%hd%hd",&g[i],&p[i]);
}
inline void rucsac()
{
	int maxx=0;
	for (short int i=1; i<=N; ++i)
	{
		for (short int j=G; j-g[i]>=0; --j)
			if (viz[j-g[i]])
			{
				rez[j]=maxim(rez[j],rez[j-g[i]]+p[i]);
				viz[j]=1;
			}
		rez[g[i]]=maxim(p[i],rez[g[i]]);
		viz[g[i]]=1;
	}
	for (int i=1; i<=G; ++i)
		maxx=maxim(maxx,rez[i]);
	printf("%d",maxx);
}
int main()
{
	read();
	rucsac();
	return 0;
}