第四节 动态规划上

总结:

1.什么时候用动态规划?

      满足下面三个条件之一,极有可能是使用动态规划:

      求最大值最小值;

      判断是否可行;

      统计方案个数(而不是给出每个具体的方案);

2.什么时候不使用动态规划?

     满足下面三个条件之一,极不可能是使用动态规划:

     求出所有具体方案而非方案个数;

     输入数据是一个集合而不是序列;(背包问题除外)
     暴力方法复杂度已经是多项式级别;

3.动规四要素

    (1)状态

            灵感,创造力,存储小规模问题的结果

    (2)方程

            状态之间的联系,怎么通过小的状态,来算大的状态

    (3)初始化

            最极限的小状态是什么, 起点 

    (4)答案

            最大的那个状态是什么,终点

4.六类动规(每种类型的状态定义比较固定):

  坐标型动态规划

  序列型动态规划

  双序列动态规划 

  划分型动态规划

  背包型动态规划

  区间型动态规划

5.坐标型动态规划

特点:路径,小人走

状态模板:  f[x] 表示我从起点走到坐标x……

          f[x][y] 表示我从起点走到坐标x,y……

lintcode例子:114,115 unique paths i and ii,

              111 climbing stairs,

              110 Minimun path sum,

              109 Triangle,

              116,117 Jump game i and ii,

              76 Longest Increasing Subsequence.

6.tips

      (1)贪心法不需要学,因为没有通用性,“背诵”以下几个经典的题目即可:

             http://www.lintcode.com/en/problem/majority-number/
     http://www.lintcode.com/en/problem/create-maximum-number/
         http://www.lintcode.com/en/problem/jump-game-ii/
         http://www.lintcode.com/en/problem/jump-game/
     http://www.lintcode.com/en/problem/gas-station/
     http://www.lintcode.com/en/problem/delete-digits/
     http://www.lintcode.com/en/problem/linked-list-cycle-ii/
     http://www.lintcode.com/en/problem/linked-list-cycle/

     (2)动态规划与分治的本质区别:子问题之间有无交集。

原文地址:https://www.cnblogs.com/coldyan/p/5867274.html