动态规划(DP)C++讲解,看着这一本就够了

什么是动态规划

用于求解某种最优性质的问题。

将带求解问题分解为若干个子问题,解决子问题,然后从这些子问题的解得到原问题的解

两个要素:状态和转移。

阶段 :求解的问题的每个过程。

状态 :状态表示每个阶段所处的情况。

策略 :策略是按顺序排列的策略组成的集合。 状态转移方程 ;状态转移方程是确定过程由一个状态到另一个状态的过程。 

什么时候使用动态规划

最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的,那么该问题具有最优子结构性质。(LIS)

子问题重叠性质:子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。(求Fibonacci)

无后效性:对于某个阶段状态,只能由前面的状态转移到,且不可以转移到前面。(对于有负边权求最短路,dijkstra是不可做的)\

动态规划是干什么的

DP常常适用于有重叠子问题和最优子结构性质的问题。

这时候就有许多同学,就开始问了:那他的步骤呢

很简单

设状态 列转移方程

今年普及组的同学注意了

常见动态规划类型有

背包问题

LIS

LCS

括号序列计数

区间DP

树形DP

数位DP

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值