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;
   }
相关推荐
Swift社区1 小时前
AI 的早期萌芽?用 Swift 演绎约翰·康威的「生命游戏」
游戏·蓝桥杯·swift
梁下轻语的秋缘1 小时前
每日c/c++题 备战蓝桥杯(P2240 【深基12.例1】部分背包问题)
c语言·c++·蓝桥杯
天才测试猿3 小时前
Selenium操作指南(全)
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
小天呐3 小时前
如何实现一个请求库?【面试场景题】
面试·职场和发展
进击的小白菜4 小时前
LeetCode 169:多数元素 - 摩尔投票法的精妙解法
算法·leetcode·职场和发展
花自向阳开10244 小时前
LeetCode hot100-9
算法·leetcode·职场和发展
姬公子5218 小时前
leetcode hot100刷题日记——33.二叉树的层序遍历
算法·leetcode·职场和发展
云泽80817 小时前
模块化设计,static和extern(面试题常见)
c语言·面试·职场和发展
Hygge-star17 小时前
【Java进阶】图像处理:从基础概念掌握实际操作
java·图像处理·人工智能·程序人生·职场和发展