1. 程式人生 > >POJ 3624 Charm Bracelet

POJ 3624 Charm Bracelet

題目大意:

美麗的貝希想要增加自己魅力值,但是帶上手鐲會增加體重。要保證自己體重要在限制內,儘量增加自己的魅力。

這是一道經典的0-1揹包問題,因為體重值太大,用二維陣列來DP不現實。我用的是滾動陣列。

#include <cstdio>
#include <algorithm>
/*
滾動陣列 
*/
using namespace std;
int main()
{
	int n,m;
	int w[3500]={0},d[3500]={0},f[13000]={0};
	scanf ("%d %d",&n,&m);
	for (int i=1;i<=n;++i)
	{
		scanf ("%d %d",&w[i],&d[i]);
	/*	
		for (int j=m;j>=0;j--)
		{
			if (j>=w[i])
				f[j]=max(f[j],f[j-w[i]]+d[i]);
		}
	*/ 
	}
	for (int i=1;i<=n;i++)//這步迴圈不必要,可以放在輸入時 
	{
		for (int j=m;j>=0;j--)
		{
			if (j>=w[i])
				f[j]=max(f[j],f[j-w[i]]+d[i]);
		}
	}
	printf ("%d\n",f[m]);
	return 0;
}