这篇文章主要记录动态规划方面的学习。
动态规划的核心思想:
把大问题分解成小问题,记住小问题的解,避免重复计算。
动态规划(DP)的三大特点:
①最优子结构:大问题的最优解可以由小问题的最优解推导出来
②重叠子问题:在求解过程中会反复遇到相同的小问题
③无后效性:当前状态一旦确定,后续过程不受之前决策的影响
题目:妈妈给你一个限重5kg的购物袋,超市有以下零食:
零食 | 重量 | 好吃度 |
---|---|---|
薯片 | 2kg | 4 |
可乐 | 3kg | 5 |
糖果 | 1kg | 3 |
饼干 | 2kg | 3 |
规则:
购物袋不能超重(≤5kg)
每种零食只能拿一件
目标是让总"好吃度"最高
容量 | 0kg | 1kg | 2kg | 3kg | 4kg | 5kg |
---|---|---|---|---|---|---|
价值 | 0 | 0 | 0 | 0 | 0 | 0 |
if 当前容量 >= 2kg:
价值 = max(不装的价值, 装的价值 = 剩余容量的价值 + 4)
容量 | 0kg | 1kg | 2kg | 3kg | 4kg | 5kg |
---|---|---|---|---|---|---|
价值 | 0 | 0 | 4 | 4 | 4 | 4 |
# 容量3kg时:
max(不装=4, 装=0kg价值0 + 5 =5) → 选5
# 容量5kg时:
max(不装=4, 装=2kg价值4 +5=9) → 选9
容量 | 0kg | 1kg | 2kg | 3kg | 4kg | 5kg |
---|---|---|---|---|---|---|
价值 | 0 | 0 | 4 | 5 | 5 | 9 |
# 容量1kg时:
max(不装=0, 装=0kg价值0 +3=3) → 选3
# 容量4kg时:
max(不装=5, 装=3kg价值5 +3=8) → 选8
容量 | 0kg | 1kg | 2kg | 3kg | 4kg |
---|