Part1.1 基础算法-贪心算法
A. 活动安排
问题描述
给定 n n n 个区间 [ l , r ] [l, r] [l,r],你需要选出 m m m 个区间使其互不相交,问你 m m m 的最大值是多少
解题思路
考虑当前已经按照顺序选择了 i − 1 i - 1 i−1 个互不相交的区间,当前需要添加第 i i i 个与 i − 1 i - 1 i−1 不相交的区间
显然 L i ≥ R i − 1 L_{i} \geq R_{i-1} Li≥Ri−1,那么我需要使得后续的队列尽可能的长,由于 L i L_{i} Li 范围固定,显然需要使得 R i R_{i} Ri 尽可能的小才能使得后续队列更长,那么每次向队列添加区间时选择 R i R_{i} Ri 最小的那个即可使得队列最长(贪心问题的最优子结构)
B. 种树
问题描述
有 n n n 段路,村民给了 h h h 组建议即 [ b i , e i ] [b_{i},e_{i}] [bi,ei] 路段至少需要种植 t i t_{i} ti 颗树,问你最少种植多少颗树能满足所有的建议
解题思路
考虑当 h = 2 h = 2 h=2 时有三元组 ( b 1 , e 1 , t 1 ) (b_{1},e_{1},t_{1}) (b1,e1,t1), ( b 2 , e 2 , t 2 ) (b_{2},e_{2},t_{2}) (b2,e2,t2),不妨设 b 1 ≤ b 2 b_1 \leq b_2 b1≤b2
- e 2 ≤ e 1 e_2 \leq e_{1} e2≤e1
即区间 1 包含区间 2,那么尽可能的在区间 2 多种树即可 - b 2 ≤ e 1 b_{2} \leq e_{1} b2≤e