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

完全背包问题拓展(爬楼梯)

基础版爬楼梯:70. 爬楼梯 - 力扣(LeetCode)

进阶版爬楼梯,在这里我就自己描述进阶版爬楼梯题目

题目如下:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 m 个台阶。你有多少种不同的方法可以爬到楼顶呢?

题目思路,这个一看,哎,和70题有大不相同,我原本只需要1或者2步就可以爬了,这一下跳到m个,我该怎么去解开这个问题呢,其实呢,我们同学想一想,这个题目我们只要把能走的台阶数,放到一个数组里面,把它当作物品,楼梯的n个台阶当作背包,爬楼梯嘛,也就是说能够上楼梯的方法,三阶楼梯,我走1步再走2步,和我走2步再走1步,这个是两个不一样的方法,那么这个是不是又是一个排列问题了呢,我们要是这么来转换就好办了,肯定编写完全背包问题,先遍历背包,在遍历物品,然后就可以找到所有的方法能够爬到n阶楼梯了。

以下是用完全背包去解开LeetCode70题的

class Solution {
public:int climbStairs(int n) {vector<int> dp(n + 1, 0);dp[0] = 1;for(int i = 1; i <= n; i++){for(int j = 1; j <= 2; j++){if(i - j >= 0 && INT_MAX - dp[i - j] >= dp[i])dp[i] += dp[i - j];}}return dp[n];}
};

这个题目只是给了能走1阶或者2阶

以下代码是解开能够m阶的爬楼梯题目

class Solution {
public:int climbStairs(int n) {vector<int> dp(n + 1, 0);dp[0] = 1;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){if(i - j >= 0 && INT_MAX - dp[i - j] >= dp[i])dp[i] += dp[i - j];}}return dp[n];}
};

是不是我们只需要把第二层for循环里面的j <= 2换成j <= m就好了呀!


http://www.mrgr.cn/news/50808.html

相关文章:

  • 【文件处理】一、XML格式文件处理
  • 大模型之三十二-语音合成TTS(coqui) 之二 fine-tune
  • STL源码剖析:适配器
  • 通过Express + Vue3从零构建一个用户认证与授权系统(二)数据库与后端项目搭建与实现
  • 【嵌入式】手把手教你入门STM32的GPIO:初识GPIO输出
  • [LeetCode 题3] 没有重复字符的最长的子字符串
  • 滚珠花键润滑技术优化:保障灵敏度与长寿命
  • 文件的读写、FileStream
  • 【基础篇】哨兵集群:哨兵挂了,主从库还能切换吗?
  • 101、QT摄像头录制视频问题
  • AI多模态测评基准(3):SuperCLUE-o 中文原生多模态实时交互测评基准
  • 4G、5G通信中,“网络侧“含义
  • 达梦数据库(DM8)兼容mysqlSQL
  • 【Unity - 屏幕截图】技术要点
  • 人工智能之动物识别专家系统
  • vue使用jquery的ajax,页面跳转
  • 【Java 并发编程】单例模式
  • 鸿蒙开发(NEXT/API 12)【发送数据到服务器】远场通信场景
  • ai-scientist部署和使用
  • 用于病理图像诊断的跨尺度多实例学习|文献速递-基于深度学习的医学影像分类,分割与多模态应用