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;
}

第三步:使用前缀和优化

这里前缀和,用prefix[N] 存放,prefixf 的前缀和,前缀和常用来计算区间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;
   }
相关推荐
JehanRio2 小时前
谈谈毕业工作一年后的变化
职场和发展
测试19983 小时前
Newman+Jenkins实施接口自动化测试
自动化测试·软件测试·python·测试工具·职场和发展·jenkins·测试用例
菥菥爱嘻嘻5 小时前
力扣面试150(42/150)
算法·leetcode·职场和发展
程序员杰哥9 小时前
软件测试之功能测试
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
测试19989 小时前
如何编写好的测试用例?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
月阳羊12 小时前
【硬件-笔试面试题】硬件/电子工程师,笔试面试题-50,(知识点:TCP/IP 模型)
经验分享·嵌入式硬件·网络协议·面试·职场和发展
BOB_BOB_BOB_12 小时前
【ee类保研面试】数学类---线性代数
线性代数·面试·职场和发展·保研
Alfred king15 小时前
Leetcode 四数之和
算法·leetcode·职场和发展·数组·排序·双指针
小新学习屋1 天前
《剑指offer》-算法篇-位运算
python·算法·leetcode·职场和发展·数据结构与算法