• 第四节 动态规划上


    总结:

    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)动态规划与分治的本质区别:子问题之间有无交集。

  • 相关阅读:
    面向对象之绑定方法与非绑定方法
    Django-admin源码解析
    单例模式
    Django-admin管理工具
    Django-CBV
    叠加装饰器,三元表达,生成,调用,递归
    迭代器与生成器
    有参装饰器
    储备知识与装饰器
    文件修改
  • 原文地址:https://www.cnblogs.com/coldyan/p/5867274.html
Copyright © 2020-2023  润新知