本文作者:
九章算法《动态规划专题》金牌讲师
清华大学全国算法竞赛金牌,ACM国际大学生程序设计竞赛全球总决赛选手。FLAG资深面试官。
动态规划题目类型多,难度高,没有固定模板,死记硬背没用。作为大厂高频面试题,动态规划问题的识别与解决一直是难点所在,往往也是决定面试成功与否的最终关卡。不过不用怕,我总结了解决动态规划类问题的4步套路,分享给大家。先备一份见面礼——7.2个G的5月最新大厂求职资料,感兴趣的同学可以长按识别白嫖~望笑纳
侯卫东的见面礼
-
FLAG高频动态规划66题
-
国内外大厂最新算法面试题
-
一线互联网公司真题解析
-
2020大厂面经汇总
礼包部分内容,长按扫码即可领取
4步套路,解决动态规划问题
1、确定问题状态
- 提炼最后一步
- 子问题转化
2、转移方程,把问题方程化
3、按照实际逻辑设置初始条件和边界情况
4、确定计算顺序并求解
结合实例感受下。
你有三种硬币,分别面值2元,5元和7元,每种硬币都有足够多。买一本书需要27元。如何用最少的硬币组合正好付清,不需要对方找钱?
关键词“用最小的硬币组合正好付清”——“最小的组合”,求最值问题,动态规划。
正常人第一反应思路:
最少硬币组合?
优先使用大面值硬币——7+7+7+5=26 额?可求解目标是27啊……
改算法——7+7+7+2+2+2=27,总共用了6枚硬币正好27元.
实际正确答案:7+5+5+5+5=27,才用了5枚硬币。
所以这里贪心算法是不正确的。
套路用起来。
第一步,确定问题状态。
动态规划问题求解需要先开一个数组,并确定数组的每个元素f[i]代表什么,就是确定这个问题的状态。类似于解数学题中,设定X,Y,Z代表什么。
A、确定状态首先提取【最后一步】
最优策略必定是K枚硬币a1, a2,…, aK 面值加起来是27。
找出不影响最