poj3624--01背包

今天背包入门了噢~~其实挺开心的啦~~

嘿嘿,虽然题目比较简单,但还是小小的成就感~

这就是算法的乐趣吧~~

加油!!!

#define LOCAL
#include <stdio.h>
#include <string.h>
#include <stdlib.h> 

#define MAXN 3500 + 10
#define MAX 13800 + 10

int dp[MAX];
int item[MAXN][2];

int main()
{
#ifdef LOCAL
	freopen("C:\\Users\\Administrator\\Desktop\\Temp\\ACMTempIn.txt", "r", stdin);
	//freopen("C:\\Users\\Administrator\\Desktop\\Temp\\ACMTempOut.txt", "w", stdout);
#endif
	int quantity, cubage;
	int i = 0,j;
	int max;
	while(scanf("%d%d", &quantity, &cubage) != EOF)
	{
		//数据输入
		for(i = 0; i < quantity; i++)
		{
			scanf("%d%d", &item[i][0], &item[i][1]);
		}

		//构造dp数组
		//初始化
		memset(dp, 0, sizeof(dp));
		for(i = 0; i <= cubage; i++)
		{
			if(i >= item[quantity - 1][0])
				dp[i] = item[quantity - 1][1];
		}
		//枚举物品
		for(i = quantity - 2; i >= 0; i--)
		{
			//更新dp数组
			for(j = cubage; j > 0; j--)
			{
				if(j >= item[i][0] && dp[j - item[i][0]] + item[i][1] > dp[j])
					dp[j] = dp[j - item[i][0]] + item[i][1];
			}
		}

		//找到最大数
		max = 0;
		for(i = 0; i <= cubage; i++)
		{
			if(dp[i] > max)
				max = dp[i];
		}

		printf("%d\n", max);
	}
	return 0;
}



你可能感兴趣的:(c,算法)