算法--01背包求解

01背包求解,每种物品只有一件,考虑装与不装,下面是转移方程

if (背包体积j小于物品i的体积)

    f[i][j] = f[i-1][j] //背包装不下第i个物体,目前只能靠前i-1个物体装包

else

    f[i][j] = max(f[i-1][j], f[i-1][j-Vi] + Wi)

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int i,j,m,n;
	int w[200],c[200],f[200][200];
	cin>>m>>n;//背包容量与物品件数 
	for(i=1;i<=n;i++)
		cin>>w[i]>>c[i];//依次输入物品重量与价值 
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
		{
			if(j>=w[i])//如果可以装得下这个物品,求最大价值 
				f[i][j]=max(f[i-1][j-w[i]]+c[i],f[i-1][j]);
			else//装不下的情况 
				f[i][j]=f[i-1][j];
		}
	cout<<f[n][m];//输出最大价值 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/hebau_pss/article/details/79995423
今日推荐