动态规划是一种将问题通过状态和状态转移的定义来拆分问题,每个状态都求出最优解并存储起来,通过状态转移来求下一个状态的最优解。
这是一个问题:一个人一次能上一个或两个台阶,有n个台阶,总共有多少种上法
static void Main(string[] args)
{
Console.WriteLine(GetNum(4));
Console.ReadKey();
}
static int GetNum(int all) {
if (all == 0) {
return 0;
}
//边界
if (all == 1) {
return 1;//台阶只有一个时,只有一种走法
}
if (all == 2) {
return 2;//台阶有两个时有两种走法
}
//计算最后两个状态
int Fi = 1;
int Fj = 2;
int temp = 0;
for (int i = 2; i < all; i++) {
temp = Fj;
Fj = Fi + Fj;//状态转移方法
Fi = temp;
}
return Fj;
}这里的状态就是 F(n),就是表示n个台阶一共有几种上法
问题的拆分就是F(n)拆分成F(1),F(2)...F(n)
状态的转移就是:F(n) = F(n-1) + F(n-2)