完全背包问题的公式推导
完全背包求最优解的公式 f[j]=max(f[j],f[j-v[i]]+w[i]);
推导:
- f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i],f[i-1][j-v[i] * 2]+2 * w[i]+…+f[i-1][j-v[i] * k]+k * w[i]);
- f[i][j-v[i]] = max(f[i-1][j-v[i]]+,f[i-1][j-2 * v[i]]]+w[i]+…+f[i-1][j-v[i] * k]+(k-1) * w[i]);
- f[i][j]=max(f[i-1][j],f[i][j-v[i]+w[i]);
- 缩减一维空间为:f[j]=max(f[j],f[j-v[i]]+w[i]);
完全背包求方案数的公式:f[j]=f[j]+f[j-v[i]];
推导:
- f[i][j] = f[i - 1][j] + f[i - 1][j - v[i]] + f[i - 1][j - 2 * v[i]] + … + f[i - 1][j - k * v[i]];
- f[i][j - v[i]] = f[i - 1][j - v[i]] + f[i - 1][j - 2 * v[i]] + … + f[i - 1][j - k * v[i]];
- f[i][j] = f[i -1][j] + f[i][j - v[i]];
- 缩减一维空间为:f[j]=f[j]+f[j-v[i]];