4.5蓝桥杯|高塔登顶方案(5025)

作者语录:

1、 从不会做到会做的过程,从不理解到不理解的过程,从一个不会做这道题的人的角度出发看这个问题,好命苦嗷嗷嗷!

2、只有我受煎熬吗,偶买噶,,,

目录

研究步骤:

[第一步:去做70. 爬楼梯 - 力扣(LeetCode)](#第一步:去做70. 爬楼梯 - 力扣(LeetCode))

第二步:使用斐波那契数列的思路暴力高塔登顶方案

第三步:使用前缀和优化


研究高塔登顶方案,如果没有思路:

研究步骤:

第一步:去做70. 爬楼梯 - 力扣(LeetCode)

cpp 复制代码
/*假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
 
提示:
1 <= n <= 45*/

#include<bits/stdc++.h>
using namespace std;
//爬n阶楼梯,返回 
int cl(int n){
	if(n==1)return 1;
	if(n==2)return 2;
	int pre=1,last=2;
	int sum=0;
	for(int i=3;i<=n;i++){
		sum=pre+last;
		pre=last;
		last=sum;
	} 
	return sum;
}
int main(){
	int n;cin>>n; 
	cout<<cl(n)<<'\n';
	return 0;
} 

第二步:使用斐波那契数列的思路暴力 高塔登顶方案

cpp 复制代码
#include <iostream>
using namespace std;
#define int long long
const int mod=1e9+7;
const int N=1e5+10;
int f[N];
signed main()
{
  // 请在此输入您的代码
  int n,m,k; cin>>n>>m>>k;
  //求方案数
  f[1]=1;//f[x]里面存的是x的是到x层的方案数          
  for(int i=2;i<=n;i++){
    //想成是类斐波那契数列:这个数的值=前n个数的和,这里的n就是从i-m到i-k
    for(int j=m;j<=k;j++){
      f[i]=f[i]+f[i-j];
      f[i]=f[i]%mod;
    }
  }
cout<<f[n]<<'\n';
  return 0;
}

第三步:使用前缀和优化

这里前缀和,用prefixN 存放,prefix 是f 的前缀和,前缀和常用来计算区间l到区间r范围的和。

**参考前缀和的话:**前缀和

https://blog.csdn.net/weixin_47011416/article/details/145358498?spm=1011.2415.3001.10575&sharefrom=mp_manage_linkhttps://blog.csdn.net/weixin_47011416/article/details/145358498?spm=1011.2415.3001.10575&sharefrom=mp_manage_link

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int m=1e9+7;
const int N=1e5+10;
int f[N],prefix[N];
signed main()
{
  // 请在此输入您的代码
  int n,m,k; cin>>n>>m>>k;
  //求方案数
  f[1]=1; prefix[1]=1;//f[x]里面存的是x的是到x层的方案数    
  int l,r;    
  int a=0;  
  for(int i=2;i<=n;i++){
     /*for(int j=m;j<=k;j++){
      f[i]+=f[i-j];
      f[i]%=mod;
    }*/
    //回忆一下前缀和的算法模板
    
    l=max(a,i-k);
    r=max(a,i-m);
    f[i]=(prefix[r]-prefix[l-1]+m)%m;
    prefix[i]=(prefix[i-1]+f[i])%m;
  }
cout<<f[n];
  return 0;
   }
相关推荐
小 黄 鸡3 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
无敌贵点大王8 小时前
嵌入式软件面试经(自用)
c语言·stm32·单片机·学习·mongodb·面试·职场和发展
程序 代码狂人9 小时前
数据开发面试【问答完整版|带深挖追问 + 扩展回答】
面试·职场和发展
浅念-12 小时前
动态规划:线性DP——多状态DP与子数组专题笔记
c++·笔记·算法·leetcode·职场和发展·动态规划·力扣
天真小巫13 小时前
2026.10.14总结
职场和发展
鸥梨菌Honevid13 小时前
UVM 面试高频:uvm_test_top 与 uvm_config_db 路径机制全解析
数据库·面试·职场和发展
Interview Aid11214 小时前
Capital One Interview 完整指南:招聘流程、OA 真题与技术面试准备
面试·职场和发展
虚无的纽扣14 小时前
【力扣刷题】第四天:三数之和、四数之和
算法·leetcode·职场和发展
_不会dp不改名_15 小时前
leetcode_3273 数位平方和的最大值
算法·leetcode·职场和发展
考研保研资料分享16 小时前
车辆与机械保研经验合辑:西交、浙大预推免与专业笔试面试复盘
面试·职场和发展