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 存放,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;
   }
相关推荐
淡海水16 小时前
C#与常用数据结构源码剖析-全篇导览
开发语言·数据结构·unity·面试·职场和发展·c#
.道阻且长.1 天前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
想吃火锅10051 天前
【leetcode】300. 最长递增子序列
算法·leetcode·职场和发展
Dr.kangder1 天前
嵌入式面试总结(八)——大小端
嵌入式硬件·面试·职场和发展·架构·嵌入式
小龙报2 天前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
我命由我123452 天前
四流一致(合同流、业务流、资金流、发票流)
经验分享·学习·职场和发展·求职招聘·职场发展·产品经理·学习方法
Dr.kangder2 天前
嵌入式面试总结(七)——哈佛架构与冯·诺依曼架构
面试·职场和发展·架构·嵌入式·软件工程
程序员杰哥2 天前
依赖于第三方接口时,如何进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
星轨初途2 天前
LeetCode 热题 100——day11 滑动窗口最大值
数据结构·c++·算法·leetcode·职场和发展
良木林2 天前
子串 - LeetCode hot 100
算法·leetcode·职场和发展