撰文 | JZ
专栏 | 九章算法

题目描述

有一个容量为 c 的背包。有 n 个 A 类物品,第 i 个 A 类物品的体积为 a[i],物品的价值为装入该物品后背包剩余容量 * k1。有 m 个 B 类物品,第 i 个 B 类物品的体积为 b[i],物品的价值为装入该物品后背包剩余容量 * k2。求最大可以获得的价值。


思路点拨

首先要知道对于 A 类物品和 B 类物品都是按体积从小到大放最优,然后剩下的就是一个二维的dp了。


考点分析

这题相对来说比较困难,是变形的背包问题,可以说是贪心+dp。设 dp[i][j] 代表A类的前i个物品,B类的前j个物品选择若干个可以得到的最大价值,则有 dp[i][j] = max(dp[i - 1][j] + (c-suma[i]-sumb[j]) * k1, dp[i][j - 1] + (c - suma[i] - sumb[j]) * k2)。


九章参考程序

https://www. jiuzhang.com/solution/s urplus-value-backpack/


九章算法 | Netflix 面试题:Surplus Value Backpack

相关文章: