11.7 背包问题(01背包)——测试用例

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn =100; //物品最大件数 
const int maxv=1000;//V的上限 
int w[maxn],c[maxn],dp[maxv];
int main()
{
	int n,V;
	scanf("%d%d",&n,&V);
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&w[i]);
	}
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&c[i]);
	}
	//边界
	for(int v=0;v<=V;++v)
	{
		dp[v]=0;
	}
	//状态转移方程
	for(int i=1;i<=n;++i)
	{
		for(int v=V;v>=w[i];--v)
		{
			dp[v]=max(dp[v],dp[v-w[i]]+c[i]);
		}
	}
	//寻找最大的dp
	int ans=0;
	for(int i=0;i<=V;++i)
	{
		if(dp[i]>ans)
		{
			ans=dp[i];
		}
	}
	printf("%d\n",ans);
	return 0;
 } 
测试数据:
输入:
5 8
3 5 1 2 2 
4 5 2 1 3
输出 :
10

 


版权声明:本文为qq_43590614原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。