浅谈对01背包的理解
做 魔药(简易版)有感

【
本题的dp思路为:dp[i][j]表示前i瓶中喝了j瓶的最大生命值:要求为求喝的最大瓶数,但以生命值为标准进行转移。
这与01背包标准模型有区别:
01标准模型:n个物品,每个wi重量 vi价值,装入容量W的背包:求最大价值-->就以价值为标准转移。
与标准模板不一样这太难受了,但为什么呢?
】
本题中,首先“自然地”考虑以瓶数为划分标准转移-->线性dp,然而立刻发现这样随时都可能反悔,不符合无后效性。(按线性dp的规律又想了一下反向线性dp,但也不行)
看答案!
既然如此,于是决定选取 "某j瓶" ,使选到的是具体哪些瓶呈现 "混沌状态"。(比如要选3瓶,但选的是第1、2、4瓶,还是第2、3、5瓶,谁也不知道)。
但不同层之间的 状态 不能混沌,需要清晰划分,所以用 "选了i瓶" 作为不同层之间的划分标准。
而回顾01背包标准模型,其实亦为同样思路:因为装入的是哪个物品不确定,则装入“不确定的某x个物品"。
于是标准模型中dp[ ][ ]的第二维度则以 "最大价值" 体现 "装入不确定的某x些物品" ,而第一维度为每层状态间的划分标准:前i个物品。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总结:01背包中,dp[i][j]表示该状态:第一维度i负责清晰地划分出每一层,第二维度j负责 从1到n 表示”有某j个××ד。其储存的就是当前状态下的最优值。第二维度所选取的×××为用传统写法必须"反悔"的东西。
浙公网安备 33010602011771号