动态规划一维简单描述

动态规划是一种将问题通过状态和状态转移的定义来拆分问题,每个状态都求出最优解并存储起来,通过状态转移来求下一个状态的最优解。

这是一个问题:一个人一次能上一个或两个台阶,有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)


首页 我的博客
粤ICP备17103704号