$0/1$ 背包使用一维数组优化时,容量从小到大枚举也能保证每件物品最多被选一次。
仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。
审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。
【考点】动态规划|状态转移依赖|完全背包
GESP 七级 动态规划模块,专门卡住“一维数组优化”这一高频考点。命题人设计此题,就是要区分考生是否真正理解状态转移的依赖关系。
看到“一维数组优化”和“容量从小到大枚举”,关键要意识到:正向枚举时,当前物品更新后的状态会被后续容量重复使用,相当于变成完全背包。正确做法必须逆序枚举容量,确保每个物品只影响一次。
选项 A 的陷阱在于“从小到大”这个绝对化表述。命题人利用的是“正向枚举也能保证”的直觉误区,其实正向枚举时,dp[j] 更新后,j+1 会用到它,导致物品被多次选。细节上,题目没提“完全背包”,就是偷换概念,让你误以为正向枚举和完全背包一样。
如果把题改成“完全背包”,正向枚举就对了;改成“每种物品最多选两次”,那正向枚举也不对,得用二维数组或更复杂的逻辑。刷到类似题,先问自己:命题人想考我理解状态转移还是单纯记结论?