动态规划多重背包
#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;
}