Cod sursa(job #903430)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 1 martie 2013 20:44:36
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb

#include <cstdio>

const int MAX_N(5001);
const int MAX_G(10001);

struct object
{
	int w;
	int p;
} v [MAX_N];

int dp [MAX_G];

int n, g, optimal;

inline void read (void)
{
	std::freopen("rucsac.in","r",stdin);
	std::scanf("%d %d",&n,&g);
	for (int i(1) ; i <= n ; ++i)
		std::scanf("%d %d",&v[i].w,&v[i].p);
	std::fclose(stdin);
}

inline void print (void)
{
	std::freopen("rucsac.out","w",stdout);
	std::printf("%d\n",optimal);
	std::fclose(stdout);
}

inline int max (int a, int b)
{
	return a > b ? a : b;
}

inline void dynamic (void)
{
	int i, j;
	for (i = 1 ; i <= n ; ++i)
		for (j = g - v[i].w ; j >= 0 ; --j)
			dp[j + v[i].w] = max(dp[j + v[i].w],dp[j] + v[i].p);
	for (i = 1 ; i <= g ; ++i)
		optimal = max(optimal,dp[i]);
}

int main (void)
{
	read();
	dynamic();
	print();
	return 0;
}