创建一个状态矩阵f,横坐标 i 是物体编号,纵坐标 j 为背包容量。
首先将 f 第0行和第0列初始化为0
接
for (int i = 1; i <= n; i++)
{
for (int j = V; j >= 0; j--)
{
if (j >= w[i])//如果背包装得下当前的物体
{
f[i][j] = max(f[i - 1][j], f[i - 1][j - w[i]] + v[i]);
}
else//如果背包装不下当前物体
{
f[i][j] = f[i - 1][j];
}
}
}
下来依次遍历f的每一行。
for(int i=1;i<n;i++)
{
for(int j=0;j<m;j++)
{
f[i][j]=f[i-1][j];
if(j-w[i]>=0)
{
f[j]=max(f[j],f[j-w[i]]+v[i]);
}
}
}