HDU - 2602(动态规划,01背包问题)

题意:

        给定容积,怎样捡骨头可以让背包价值最高.(典型01背包问题)


解题思路:

        dp[j]表示当背包装了j空间时的最大价值,采用滚动数组.


下面是代码.

#include 
#include 
#include 

using namespace std;

int main()
{
	int t,i,j,total,n;
	int dp[1005],w[1005],v[1005];
	scanf("%d",&t);
	
	while(t--)
	{
		scanf("%d%d",&n,&total);
		for(i = 0;i < n;i++)
		{
			scanf("%d",&v[i]);
		}
		for(i = 0;i < n;i++)
		{
			scanf("%d",&w[i]);
		}
		memset(dp,0,sizeof(dp));
		for(i = 0;i < n;i++)
		{
			for(j = 0;j <= total;j++)
			{
				if(total - j >= w[i])
					dp[j] = max(dp[j],dp[j+w[i]]+v[i]);
			}
		}
		printf("%d\n",dp[0]);
	}
	
	return 0;
}

你可能感兴趣的:(动态规划)