## 前言 在刚上大一的时候,刚接触C语言的我,竟然有着一颗ACMer的梦,当然,最后磨灭了。记得当时一个ACM的学长给我说,让我先把动态规划学习了……呃,这么久了,还是第一次看动态规划。当然,现在还是看到最简单的动态规划。 ## 核心 首先说动态规划算法的核心吧,这也是我看完大神的博客以后并且知道什么是动态规划之后了解到的第一个知识: 首先是一个小例子 >A “1+1+1+1+1+1+1+1 =?” A : “上面等式的值是多少” B : 计算 “8!” A 在上面等式的左边写上 “1+” A : “此时等式的值为多少” B : quickly “9!” A : “你怎么这么快就知道答案了” A : “只要在8的基础上加1就行了” A : “所以你不用重新计算因为你记住了第一个等式的值为8!动态规划算法也可以说是 ‘记住求过的解来节省时间’”
这个小例子其实已经可以阐述动态规划的核心了:记住已经解决过的子问题的解
小例题:斐契那波数列问题
相信大家都知道美国电影里的FBI,可是大家是否知道意大利数学家斐波那契提出的著名的FIB数列呢,其定义如下:对于正整数数列A[n]有 A [ 1 ] = 1 , A [ 2 ] = 1 , A [ N ] = A [ N − 1 ] + A [ N − 2 ] ( N > 2 ) A[1] = 1, A[2] = 1, A[N] = A[N-1] + A[N-2] (N>2) A[1]=1,A[2]=1,A[N]=A