动态规划完全背包
题目:有 n n n种重量和价值分别为 w i , v i ( 0 ≤ i < n ) {w_i},{v_i}(0 \le i < n) wi,vi(0≤i<n)的物品,从这些物品中挑选总重量不超过 W W W的物品,求出挑选物品价值总和最大的挑选方案,这里每种物品可以挑选任意多件。
#include <iostream>
using namespace std;
int n=3;
int w[]={3,4,2};
int v[]={4,5,3};
int W=7;
int max0 = -1;
int max1 = -1;
int x = 1;
//f是指标函数
//s是状态变量
//k是阶段变量
int f(int s,int k)
{
if(s<=0||k>n)
return 0;
else if(s >= w[k])
{
max0 = -1;
for(x=0; s>=x*w[k-1]; x++)
{
max1 = max(f(s,k+1), f(s-x*w[k-1], k+1) + x*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;
}