【蓝桥杯】算法笔记2

这篇文章主要记录动态规划方面的学习。

动态规划的核心思想:

把大问题分解成小问题,记住小问题的解,避免重复计算。

动态规划(DP)的三大特点

①最优子结构:大问题的最优解可以由小问题的最优解推导出来

②重叠子问题:在求解过程中会反复遇到相同的小问题

③无后效性:当前状态一旦确定,后续过程不受之前决策的影响


0-1背包问题

生活化题目:吃货的购物计划

题目:妈妈给你一个限重5kg的购物袋,超市有以下零食:

零食 重量 好吃度
薯片 2kg 4
可乐 3kg 5
糖果 1kg 3
饼干 2kg 3

规则

  1. 购物袋不能超重(≤5kg)

  2. 每种零食只能拿一件

  3. 目标是让总"好吃度"最高

分步思考图解

第0步:初始化表格(空包状态)

容量 0kg 1kg 2kg 3kg 4kg 5kg
价值 0 0 0 0 0 0

第1步:考虑薯片(2kg,好吃度4)

if 当前容量 >= 2kg:
    价值 = max(不装的价值, 装的价值 = 剩余容量的价值 + 4)
容量 0kg 1kg 2kg 3kg 4kg 5kg
价值 0 0 4 4 4 4

第2步:加入可乐(3kg,好吃度5)

# 容量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

第3步:加入糖果(1kg,好吃度3)

# 容量1kg时:
max(不装=0, 装=0kg价值0 +3=3) → 选3
# 容量4kg时:
max(不装=5, 装=3kg价值5 +3=8) → 选8
容量 0kg 1kg 2kg 3kg 4kg

你可能感兴趣的:(#,蓝桥杯,蓝桥杯,算法,笔记)