目录
题目:
Part 1 状态表示
首先我们需要分析这个题目所需要的维度,简单来说就是在之后的状态转移方程中有几个变量。在题目中有三个是变量,分别是第i个物品和其重量、价值。但由于我们题目所求的就是价值,所以可以用物品编号和重量表示。减少一个变量后我们就可以清晰地分析出维度——2。
分析出维度后,我们便可以创建一个2维数组了。我将其命名为 f [ i ][ j ],其中i是指前 i 个数中选择,j 是指在选择中的最大承重,显而易见,j <=W(背包容量)。在上文的i,j的意思分析后,f [ i ][ j ]也好解释了,它是指在前 i 个物品中选择重量为 j 的所有方案中价值V最大的一种方案。这是整个题目的基础之一,建议多理解几遍后再往下阅读。
Part 2 状态计算
知道了如何定义数组,接下来我们要做的是分析状态转移方程了。
方程的寻找过程中,我们第一步要做的是划分子问题。在这里一般是将 f [ i ][ j ] 划分为 选择第 i 个物品 和 不选择第