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

【蓝桥】动态规划-简单-破损的楼梯

 题目

解题思路 

 完整代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+9;
const long long p=1e9+7;
long long dp[N];//dp[i]表示走到第i级台阶的方案数
bool broken[N];//broken代表破损台阶的数组
int main()
{int n,m;cin>>n>>m;for(int i=1;i<=m;i++){int x;cin>>x;broken[x]=true;//如果第x级台阶破损了,那就设置成true}dp[0]=1;//第1级台阶比较特殊,因为它只有一种走法,就是从第0级迈到第1级,所以单独列出if(!broken[1])//如果第一级台阶没有破损{dp[1]=1;}
//破损默认dp[1]为0for(int i=2;i<=n;i++)//如果第1级台阶坏了,那就从第2级台阶开始{if(broken[i]){continue;}dp[i]=(dp[i-1]+dp[i-2])%p;//因为一次可以迈1—2个台阶(即可以从i-1或i-2级迈到第i级),所以第i级的方案数等于i-2级的方案数 + i-1级的方案数}cout<<dp[n]<<endl;return 0;
}

内存图助解

初始状态

在读取输入之前,flagdp 数组都被初始化为 0,nm 未赋值。

n: 未初始化
m: 未初始化flag: [0, 0, 0, 0, 0, 0, 0]  // flag[0] 到 flag[6]
dp:   [0, 0, 0, 0, 0, 0, 0]  // dp[0] 到 dp[6]

读取输入后的状态

读取 n = 6m = 1 后,标记破损点 3

n: 6
m: 1flag: [0, 0, 0, 1, 0, 0, 0]  // flag[3] 被标记为 1
dp:   [0, 0, 0, 0, 0, 0, 0]  // dp 数组未初始化
n: 6
m: 1flag: [0, 0, 0, 1, 0, 0, 0]
dp:   [1, 0, 0, 0, 0, 0, 0]  // dp[0] = 1,因为起点不是破损点

第一步:计算 dp[1]

  • flag[1] = 0,不是破损点。

  • dp[1] = dp[0] = 1

n: 6
m: 1flag: [0, 0, 0, 1, 0, 0, 0]
dp:   [1, 1, 0, 0, 0, 0, 0]

第二步:计算 dp[2]

  • flag[2] = 0,不是破损点。

  • dp[2] = dp[1] + dp[0] = 1 + 1 = 2

n: 6
m: 1flag: [0, 0, 0, 1, 0, 0, 0]
dp:   [1, 1, 2, 0, 0, 0, 0]

第三步:计算 dp[3]

  • flag[3] = 1,是破损点,跳过。

  • dp[3] = 0

n: 6
m: 1flag: [0, 0, 0, 1, 0, 0, 0]
dp:   [1, 1, 2, 0, 0, 0, 0]

最终结果为

n: 6
m: 1flag: [0, 0, 0, 1, 0, 0, 0]
dp:   [1, 1, 2, 0, 2, 2, 4]

输出 dp[6],即到达终点的合法走法数量4

http://www.lryc.cn/news/531946.html

相关文章:

  • 如何自定义软件安装路径及Scoop包管理器使用全攻略
  • 107,【7】buuctf web [CISCN2019 华北赛区 Day2 Web1]Hack World
  • STM32 ADC单通道配置
  • 【技海登峰】Kafka漫谈系列(二)Kafka高可用副本的数据同步与选主机制
  • Spring的三级缓存如何解决循环依赖问题
  • Ext文件系统
  • 回溯算法---数独问题
  • 蓝桥杯python基础算法(2-1)——排序
  • 【课程笔记】信息隐藏与数字水印
  • Page Assist实现deepseek离线部署的在线搜索功能
  • composeUI中Box 和 Surface的区别
  • 【LeetCode】5. 贪心算法:买卖股票时机
  • MySQL表的CURD
  • Java 如何覆盖第三方 jar 包中的类
  • VSCode中使用EmmyLua插件对Unity的tolua断点调试
  • 【数据结构】_链表经典算法OJ(力扣/牛客第二弹)
  • Spring Boot 2 快速教程:WebFlux优缺点及性能分析(四)
  • 自定义多功能输入对话框:基于 Qt 打造灵活交互界面
  • 基于springboot河南省旅游管理系统
  • LabVIEW图像采集与应变场测量系统
  • CommonAPI学习笔记-2
  • ISP代理与住宅代理的区别
  • [25] cuda 应用之 nppi 实现图像色彩调整
  • Java 大视界 -- Java 大数据在智慧文旅中的应用与体验优化(74)
  • PyTorch快速入门
  • 100.7 AI量化面试题:如何利用新闻文本数据构建交易信号?
  • CF 465B.Inbox (100500)(Java实现)
  • 微信小程序获取openid和其他接口同时并发请求如何保证先获取到openid
  • 实现动态卡通笑脸的着色器实现
  • DeepSeek R1 模型解读与微调