前言
这篇博客主要是跟大家相互交流学习动态规划问题,下面记录的是一些我的学习心得。有不足的情况还望大家私聊交流指正。
我写这篇博客的思路大概是这样:首先解释下动态规划的关键概念,然后列出各种动态规划类型的题目,只要能够跟着我的博客完成之后的动态规划题目我觉得应该能够解决平时遇到的百分之90的动态规划的问题
一、动态规划的四大组成部分
1、确定状态
状态在动态规划中的作用至关重要。简单理解状态就是我们需要一个数组,数组中的每个元素就是代表状态。确定状态需要两个关键意识:最后一步和子问题。
(1)最后一步(可以直接根据问题来确定最后一步)
确定最后一步有两个关键点。这里我举个例子,例如常见的零钱兑换问题(你有三种硬币,分别是面值2元,5元,7元的,每种硬币足够多,买一本书需要27元,如何用最少的硬币组合正好付清)。我们不知道这个最优策略是啥,但是可以确定一定有最后的一枚硬币ak,除掉这枚硬币前面的币值加起来就是27-ak,我们不需要去关心前面的k-1枚硬币怎么拼出27-ak的,因为那就是我们的子问题。
(2)子问题
愿问题是用最少的硬币拼出27,而经过刚刚最后一步的确认,我们转化成了如何用最少的硬币拼出27-ak,这就是我们的子问题
确定好了最后一步和子问题,我们就可以开一个数组f[x]表示最少用多少枚硬币拼出X
2、转移方程
通过对最后一步和