动态规划多重背包

动态规划多重背包

#include <iostream>
using namespace std;
int n=3;
int w[]={3,4,2};
int v[]={4,5,3};
int W=7;
//f是指标函数
//s是状态变量
//k是阶段变量
int f(int s,int k)
{
	if(s<=0||k>n)
		return 0;
	else if(s>=w[k])
	{
		int xk=1;
		int max0=-1;
		int max1=-1;
		for(xk=0;s>=xk*w[k-1];xk++)
		{
			max1=max(f(s,k+1),f(s-xk*w[k-1],k+1)+xk*v[k-1]);
			if(max0<max1)
			{
				max0=max1;
			}
		}
		return max0;
	}
	else
		return f(s,k+1);
}
int main()
{
	int max_value=f(W,1);
	cout << max_value<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_38604589/article/details/88768671
今日推荐