走楼梯2(Daimayuan Online Judge)

简介: 走楼梯2(Daimayuan Online Judge)

这题我的解法是使用状态机思维且看我下面的状态关系图:

这是我给出的三个状态,走一步用0状态表示,走一次两步用1状态表示,走两次两步用状态2表示,他们的转移关系如图

对图的解释:
1.走一步怎么转移过来的:可以选择继续走一步转移过来(如图中的自环);走两步无论第一次还是第二次走两步,可以下一次走一步。

2.走一次两步怎么转移过来的: 可以走一步后选择走两步。
3.连续走两次两步怎么转移过来的: 可以走一次两步后再接着走两步。

1.状态定义

定义f [ i , j ] f[i,j]f[i,j],i ii 为此时是第几个台阶,j jj为此时的状态是走一步转移过来的(0),还是连续两次走两步过来的(2),还是只走一次两步过来的(1),此时的方案数为f [ i ] [ 0 ] + f [ i ] [ 1 ] + f [ i ] [ 2 ] f[i][0]+f[i][1]+f[i][2]f[i][0]+f[i][1]+f[i][2]

2.状态表示

根据状态图可以得出下面的转移式

1.f [ i ] [ 0 ] + = f [ i − 1 ] [ 0 ] + f [ i − 1 ] [ 2 ] + f [ i − 1 ] [ 1 ] ; f[i][0]+=f[i-1][0]+f[i-1][2]+f[i-1][1];f[i][0]+=f[i1][0]+f[i1][2]+f[i1][1];

2.f [ i ] [ 1 ] + = f [ i − 2 ] [ 0 ] ; f[i][1]+=f[i-2][0];f[i][1]+=f[i2][0];

3.f [ i ] [ 2 ] + = f [ i − 2 ] [ 1 ] ; f[i][2]+=f[i-2][1];f[i][2]+=f[i2][1];

/*********************************************************************
    程序名:
    版权: Joecai
    作者: Joecai
    日期: 2022-03-27 21:17
    说明:
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
# define rep(i,be,en) for(int i=be;i<=en;i++)
# define pre(i,be,en) for(int i=be;i>=en;i--)
typedef pair<int, int> PII;
#define ll long long
#define endl "\n"
#define LOCAL
#define pb push_back
const int N = 2e5 + 10, INF = 0x3f3f3f3f;
int n;
ll f[100][3];
void solve()
{
  cin >> n;
  f[0][0] = 1;
  f[1][0] = 1;
  for (int i = 2; i <= n; i++)
  {
    f[i][0] += f[i - 1][0] + f[i - 1][2] + f[i - 1][1];
    f[i][1] += f[i - 2][0];
    f[i][2] += + f[i - 2][1];
  }
  cout << f[n][0] + f[n][1] + f[n][2] << endl;
}
int main() {
  //std::ios::sync_with_stdio(false);
  //std::cin.tie(nullptr);
  //#ifdef LOCAL
  //freopen("data.in.txt","r",stdin);
  //freopen("data.out.txt","w",stdout);
  //#endif
  int __ = 1;
  //cin>>__;
  while (__--)
  {
    solve();
  }
  return 0;
}

点个赞走吧~

目录
相关文章
数据结构之栈的讲解(源代码+图解+习题)
我们在学习过顺序表和链表之后,了解了使用数组存储数据,使用结构体来存储数据和有关的指针,这些都是底层的东西,链表是靠指针的链接,顺序表是靠数组的下标才能得以实现增删查改。众多数据结构其实底层都离不开数组,指针和结构体,今天我们要学习的栈也不例外,话不多说,直接上正菜!
数据结构之栈的讲解(源代码+图解+习题)
|
2月前
|
自然语言处理 Linux API
阿里云+本地全平台部署OpenClaw(Clawdbot)全流程|千问/Coding Plan API配置+小红书自动发图文+常见问题
2026年,AI自动化工具与社交平台运营深度融合,OpenClaw(原Clawdbot)凭借开源、可扩展、支持多平台部署与多模型接入的特性,成为个人与团队实现自动化运营的核心工具。作为一款开源AI智能体框架,OpenClaw支持本地与云端双部署,可集成阿里云千问、Coding Plan等大模型API,实现自然语言指令执行、任务自动化、多平台内容发布等功能,尤其适配小红书等社交平台的自动运营需求。
499 2
|
25天前
|
数据采集 人工智能 自然语言处理
OpenClaw 2.6.2 核心 Skill 推荐 新手快速上手教程
OpenClaw 2.6.2「小龙虾」Skill技能推荐:15个超实用扩展,覆盖文件整理、办公自动化(Word/Excel/PDF/邮件)、浏览器操作、系统管理及内容处理五大场景,零门槛一键启用,小白也能即刻提升效率!
|
19天前
|
监控 数据可视化 安全
阿里云Elasticsearch小白入门完全指南(超详细版)
本指南详解阿里云Elasticsearch入门全流程:从注册账号、创建VPC网络和交换机,到购买向量增强版ES实例(8.17.0)、配置Kibana白名单并登录,再到使用Dev Tools创建索引、写入/查询数据(全文、精确、范围等),以及可视化与成本优化建议。
|
5月前
|
人工智能 网络协议 安全
阿里云国际站高防服务器的原理是什么?高防ip怎么做??
阿里云国际站高防服务器的原理是什么?高防ip怎么做??
356 1
|
6月前
|
人工智能 定位技术 知识图谱
【两大核心+四轮驱动】Geo优化方案规划:避开17个AI时代获客陷阱的实战指南
于磊老师首创“两大核心+四轮驱动”Geo优化方法论,倡导人性化Geo与内容可信度,助力企业避开17大陷阱,在AI时代构建权威信源,实现获客提效与品牌升级。
378 12
|
10月前
高维结构投影系列(三):四力其实不止四力:看到的是投影而已
现代物理难统一四大基本力:引力为何无法量子化?强力为何极强却短程?弱力为何只作用左手粒子?电磁力为何最对称?本文提出全新视角:四力并非独立机制,而是同一高维张力结构在不同维度的投影表现。引力是结构凹陷的回弹,强力是张力锁死的爆发,弱力是方向性剪枝,电磁力则是共振传播面。四力本是一体,只是我们看到的是其不同“切面”。统一之路,或在于还原结构本质,而非数学拼凑。
439 0
|
数据挖掘 Python
Python中实现数字统计最高频率的技术探索
Python中实现数字统计最高频率的技术探索
610 0
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
407 0
C++ 多线程之线程管理函数
一文教会你如何在论文中插入参考文献的角标
这篇文章介绍了在撰写论文时如何添加参考文献编号,并在文中插入这些参考文献的角标,以及如何通过点击文献编号跳转到对应的参考文献列表。
一文教会你如何在论文中插入参考文献的角标