一、什么是动态规划?
动态规划是一种用来解决一类最优化问题的算法思想。简单来说,动态规划将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会将每个求解过的子问题的解记录下来,这样当下一次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。
二、递推:
1、顺推法:从已知条件出发,逐步推算出要解决问题的方法。如:斐波那契数列
e.g. 母牛的故事
(题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2018)
问题分析:简单的递推计数。菲波拉契数列是是十分有用的,可以用来描述动物的繁衍过程。本题就是其中一个例子,其递推关系类似于斐波拉契数列。
表1.3母牛繁殖规律
这个问题可以得出以下的函数递推式:
f(n)=n n<=4
f(n)=f(n-1) + f(n-3) n>4
#include <stdio.h>
int cow(int n)
{
if(n <= 4)
return n;
else
return cow(n-1) + cow(n-3);
}