【算法】动态规划

本文详细介绍了动态规划的解决类型、特性以及过程步骤,包括计数问题和极值问题,如最大子数组之和和不同路径问题。动态规划具有重复子问题、无后效性和最优化子结构等特性,通过记忆化策略优化计算效率。文章提供两个经典例题,加深读者对动态规划的理解,并推荐在LeetCode上进行实践。
摘要由CSDN通过智能技术生成

目录

1.解决什么类型问题

1.1 计数问题

1.2 极值问题

2.特性

2.1 重复子问题

2.2 无后效性

2.3 最优化子结构

3.过程步骤

3.1 设计步骤

3.2 练习反馈

Ex 1 最大子数组之和(easy)


1.解决什么类型问题

1.1 计数问题

如最典型的青蛙跳,也就是斐波那契数列、棋盘路径问题、

还有组合公式,不重复组合( Combination ),c(n, m)从n个选手中选出m个出道~(101哈哈哈哈哈),有多少种可能性?这个问题可以分解为两个子问题,根据最后一个人能不能进组合有两种可能:

最后一个人出道,剩余席位是m-1, 子问题是c(n-1, m-1)

最后一个人不能出道,剩余席位还是m,子问题是c(n-1,m)

c(n, m) =
 { c(n-1, m-1) + c(n-1, m)  , if n > 1 and m > 1 and n >= m
 { n                        , if m = 1
 { 1                        , if n = 1

这一类问题通常递推公式子问题的和,c(n, m) =c(n-1, m-1) + c(n-1, m)边界就是m=1或者n=1。

1.2 极值问题

背包问题,就是多阶段最优决策。一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条决策路径。
    初始状态→│决策1│→│决策2│→…→│决策n│→结束状态

棋盘最大和(最小和),从(0,0) 到 (n-1,n-1)路上数值最大和

这一类问题通常递推公式是子问题max、min值,如上题c[i][j] = max(c[i-1][j], c[i][j-1])  +  a[i][j];

还有最长递增子序列、最少找零问题、最大子数组等等,更多问题和详情可见top15动态规划

2.特性

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值