2021-07-21

本文探讨了动态规划在计数、最大最小值求解及存在性判断等问题上的应用,重点介绍了如何通过分解问题、确定状态和状态转移方程来解决复杂问题,如路径和和的计算、最长上升序列等,并以跳台阶问题为例详细阐述了如何记忆过往状态以减少重复计算。
摘要由CSDN通过智能技术生成

动态规划

题目大概类型

1.计数
有多少种方式走到右下角
有多少种方法选出k个数是的和是sum
2.求最大最小值
从左上角到右下角路径的最大数字和
最长上升序列长度
3.存在性
去石子游戏。选手是否必胜
能不能选出k个数使得和是sum

注意:拆分子问题,记住过往,减少重复的计算

一般自上而下

dp[0][0][...] = 边界值
for(状态1 :所有状态1的值){
    for(状态2 :所有状态2的值){
        for(...){
          //状态转移方程
          dp[状态1][状态2][...] = 求最值
        }
    }
}

1.原问题分解,穷举分析穷举的时候要注意会存在「重叠子问题」,通过分解原问题就出子问题的最值得到原问题最值

2.确定状态,边界

3.写出状态转移方程

D题思路

1.根据题目的意思可以知道dp的能量消耗,并且每次只可以跳一阶或者两阶,在原地的时候能量消耗值最小为0,即跳一阶的消耗值也可以得到只有一种。求第2阶往后的判断当前 求出状态转移方程dp[i-2]+abs(a[i]-a[i-2]),dp[i-1]+abs(a[i]-a[i-1]),然后根据题目意思每次记住过往保留他的最小值

       dp[0]=0;
        dp[1]=abs(a[1]-a[0]);
        for(int i=2; i<n; i++)
        {
            dp[i]=min(dp[i-2]+abs(a[i]-a[i-2]),dp[i-1]+abs(a[i]-a[i-1]));
        }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值