当前位置: 首页 > article >正文

代码随想录算法【Day32】

动态规划理论基础

问题分类

动态规划基础问题

背包问题

打家劫舍

股票问题

子序列问题

每道题按照以下五部曲想清楚

DP数组的定义以及下标的含义

递推公式

DP数组如何初始化

遍历顺序

打印DP数组

Day32

509. 斐波那契数
class Solution {
public:
    int fib(int n) {
        if(n <= 1) return n;
        int dp[2];
        dp[0] = 0;
        dp[1] = 1;
        for(int i = 2; i <= n; i++){
            int sum = dp[0] + dp[1];
            dp[0] = dp[1];
            dp[1] = sum;
        }
        return dp[1];
    }
};

五部曲

1.dp数组及下标定义:dp[0]和dp[1]表示当前遍历的数的前两个数的值,下标表示前两个数中的第一个还是第二个

2.递推公式:sum = dp[0] + dp[1];

3.初始化:dp[0] = 0, dp[1] = 1;

4.遍历顺序:从前往后遍历

5.数组的数据应该是怎样的:0 1 1 2 3 5 8....

70. 爬楼梯
class Solution {
public:
    int climbStairs(int n) {
        int dp[2];
        dp[0] = 1;
        dp[1] = 2;
        if(n <= 1) return n;
        for(int i = 2;i < n; i++){
            int sum = dp[0] + dp[1];
            dp[0] = dp[1];
            dp[1] = sum;
        }
        return dp[1];
    }
};

五部曲

1.dp数组及下标定义:dp[0]和dp[1]表示当前遍历的数的前两个数的值,下标表示前两个数中的第一个还是第二个

2.递推公式:sum = dp[0] + dp[1];

3.初始化:dp[0] = 1, dp[1] = 2;

4.遍历顺序:从前往后遍历

5.数组的数据应该是怎样的:1 2 3 5 8

746. 使用最小花费爬楼梯
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        vector<int> dp(cost.size() + 5);
        dp[0] = 0;
        dp[1] = 0;
        for(int i = 2; i < cost.size() + 1; i++){
            dp[i] = min((cost[i - 1] + dp[i - 1]), (cost[i - 2] + dp[i - 2]));
        }
        return dp[cost.size()];
    }
};

五部曲

1.dp数组及下标定义:dp数组的值表示到达当前阶梯所需的最小花费,下标表示当前的台阶是第几阶

2.递推公式:dp[i] = min((cost[i - 1] + dp[i - 1]), (cost[i - 2] + dp[i - 2]));

3.初始化:dp[0] = 0, dp[1] = 0; dp[2] = min(cost[0], cost[1]);

4.遍历顺序:从前往后遍历

5.数组的数据应该是怎样的:若cost.size() = 3,即存在cost[2],此时i = 3即为登顶,返回dp[3]


http://www.kler.cn/a/521159.html

相关文章:

  • 前端jquery 实现文本框输入出现自动补全提示功能
  • 全志 视频输入组件的使用
  • 基于Python的哔哩哔哩综合热门数据分析系统的设计与实现
  • 开源物业管理系统赋能社区管理提升居民服务体验与满意度
  • Effective Objective-C 2.0 读书笔记—— objc_msgSend
  • 【MySQL】 数据类型
  • Go中的Context(上下文)
  • ESP8266基于WiFiManager设置页面添加参数并且掉电不丢失
  • GIT管理指令
  • Object类(1)
  • Qt Enter和HoverEnter事件
  • 硬件学习笔记--36 TTL、RS232、RS485相关介绍
  • Linux相关概念和易错知识点(26)(命名管道、共享内存)
  • PostGIS笔记:PostgreSQL 数据库与用户 基础操作
  • 使用ensp进行ppp协议综合实验
  • API接口开发淘宝商品数据一键解析获取商品信息编写
  • Linux Ubuntu 18.04下创建桌面快捷方式
  • 云原生:构建现代化应用的基石
  • 在亚马逊云科技上用Stable Diffusion 3.5 Large生成赛博朋克风图片(上)
  • 【深入理解FFMPEG】命令行阅读笔记
  • 基于微信小程序的外卖点餐系统设计与实现ssm+论文源码调试讲解
  • DeepSeek R1:AI领域的新突破与挑战
  • 【集合】ArrayList扩容机制的源码剖析
  • 航空开放系统架构OSA 与集成 IMA 概念解析
  • 安装 docker 详解
  • CSS all 属性