二次学习动态规划
最近在看一本经典的程序员书籍:《编程之美》,里面有一道买书的算法题,书中指导使用动态规划去解决该问题,虽然一年前有那么几天看似深入的学习了一下动态规划,但这次看完书上的解释之后还是不太清楚如何写代码去解决买书问题,所以用文章的方式再次记录一遍自己学习动态规划与解决买书问题的过程。
动态规划
动态规划是通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法,前面这句解释是从维基百科摘录的,描述的相对简单,全文还有更为详细的解释,有兴趣的朋友可以看一下,不过看完后可能依旧云里雾里。
但知乎上的这个回答感觉是讲清了动态规划的本质,即寻找状态定义与状态转移方程,为了保证状态转移方程的正确性,可能需要严谨的证明过程,《编程之美》在买书问题上对动态规划解法着重讲解的就是状态转移方程的证明过程。
针对动态规划相关话题,自己只是门外汉,没有什么深刻的认识,故不做主观上的讲解,大家Google就好~
最长上升子序列
问题
最长上升子序列问题,算是动态规划话题的中的典型问题,理解起来不算特别复杂,问题描述:
给定一个数列,长度为N,求这个数列的最长上升(递增