惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Blog — PlanetScale
Blog — PlanetScale
PCI Perspectives
PCI Perspectives
K
Kaspersky official blog
T
Tenable Blog
Help Net Security
Help Net Security
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
罗磊的独立博客
P
Palo Alto Networks Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
人人都是产品经理
人人都是产品经理
L
LangChain Blog
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
博客园_首页
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Help Net Security
S
Secure Thoughts
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Project Zero
Project Zero
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
V2EX
Last Week in AI
Last Week in AI
H
Heimdal Security Blog
U
Unit 42
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
SecWiki News
SecWiki News
量子位
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
NISL@THU
NISL@THU
S
Securelist
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
云风的 BLOG
云风的 BLOG
I
Intezer
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - Franky
Cisco Talos Blog
Cisco Talos Blog
小众软件
小众软件
C
CXSECURITY Database RSS Feed - CXSecurity.com

faryou的博客

出租车上的对话 faryou的博客-告别小高一 faryou的博客-中考 · 竞赛 · 生活 · 思考 5月月考 - faryou的博客 - 日记 faryou的博客-五一回老家 【汇编 - 功能】中断安装中断实现 【汇编&硬件】时钟中断的具体实现 faryou的博客-这些年,我不再看《熊出没》 【汇编&硬件】关机中断的具体实现 【汇编&硬件】网络连接相关中断的具体实现 faryou的博客-年初小记 【汇编&硬件】鼠标控制中断的具体实现 【汇编&硬件】声音输出中断的具体实现 【汇编&硬件】屏幕输出中断的具体实现 【汇编&硬件】磁盘读取中断的具体实现 【汇编&硬件】键盘读取中断的具体实现 【汇编】汇编环境的搭建及Debug的使用教程 【汇编】漫谈:学习汇编后的一些思考 faryou的博客-关于本站即日起实行“一站三体”运营制度 【汇编基础教程】完结篇 写在最后:前言 【汇编基础教程】使用BIOS的中断实现键盘输入及磁盘I/O 【汇编基础教程】中断 【汇编基础教程】端口 【汇编基础教程】标志寄存器 【汇编基础教程】再谈栈 【汇编基础教程】段 【汇编基础教程】来存一些数据! 【汇编基础教程】寄存器和内存&一些基本命令的说明 【汇编基础教程】来写个“函数” 【汇编基础教程】更灵活的定位内存 【汇编基础教程】理解一下[bx]和loop指令 【汇编基础教程】跳一跳! faryou的博客-我的竞赛经历&对人生的一些思考 faryou的博客-关于现在中小学计算机课的一些想法及思考 faryou的博客-2025年度总结 faryou的博客-临平山下十五年 faryou的博客-Windows 10即将停止支持,谈谈自己从小到大用电脑的感受 faryou的博客-谈谈一名10后的怀旧情怀 【汇编基础教程】8086CPU工作原理 【C语言】指针的理解与应用 【算法教程】【C/C++】DP(动态规划):区间DP——程序设计思路与代码实现 【算法教程】【C/C++】BFS(广度优先搜索)——程序设计思路与代码实现 【算法教程】【C/C++】DFS(深度优先搜索)——程序设计思路与代码实现 【算法教程】【C/C++】单源最短路径——程序设计思路与代码实现 【算法教程】【C/C++】最小生成树——程序设计思路与代码实现 【算法教程】【C/C++】并查集——程序设计思路与代码实现 【算法教程】【C/C++】DP(动态规划):背包DP——程序设计思路与代码实现 【算法教程】【C/C++】DP(动态规划):简单动规问题——程序设计思路与代码实现 【算法教程】【C/C++】三分算法——程序设计思路与代码实现 【算法教程】【C/C++】二分答案——程序设计思路与代码实现 【算法教程】【C/C++】二分查找——程序设计思路与代码实现 【算法教程】【C/C++】贪心算法——程序设计思路与代码实现 【算法教程】【C/C++】基础数学:快排——程序设计思路与代码实现 【算法教程】【C/C++】基础数学:快速幂——程序设计思路与代码实现 【算法教程】【C/C++】基础数学:进制转换——程序设计思路与代码实现 一文弄懂C++中的自定义函数 faryou的博客-2024年度总结
【算法教程】【C/C++】递推——程序设计思路与代码实现
作者: faryou · 2024-07-07 · via faryou的博客

前言
在算法中,递推是一种重要的方法。通过列出递推式,我们可以解决许多棘手的问题。

“状态”
在算法中,状态是指某个变量在某种特定情况下的值。例如当i>=0时,abs(i)==i;而当i<=0时,abs(i)==-i。如果我们把这里的abs(i)赋值给一个变量j,那么这个变量j的状态(值)就随着i的变化而变化。
就上面这个例子,我们可以列出关于j的状态转移方程:当i>=0时,j[i]=i;当i<=j时,j[i]=-i。

程序设计思路
在解决具有嵌套性质的问题时,尤其是当n的值不同,且各个答案之间有关联的问题时,列出一个正确的递推式,就几乎等于解决了问题,不必进行暴力搜索等操作。
由于直接讲解比较抽象,所以我们直接来看题目。

代码实现
202408221724303365825395.png
可以看到,这道题要求我们计算走楼梯的步数。很显然,如果我们使用搜索来解题,那么速度将会偏慢,导致TLE。所以,这里我们使用递推来解决问题。
由题意,可知走到第x个台阶,一定是从第i-1个台阶或从第i-2个台阶出发。由此,我们可以列出方程:f[x]=f[x-1]+f[x-2](f[x]表示走到第x个台阶的方案总数)。
列出方程后,我们只需要找到这个方程的初始状态就可以求解了。而不难看出f[1]=1,f[2]=2。问题解决!
你以为这就完了?No!注意数据没有范围,要用高精度!!!(如果不知道怎么用高精度的可参考:https://blog.faryou.eu.org/tech/index.php/archives/tech/29.html
代码如下:

#include <bits/stdc++.h>
using namespace std;

int a[5010][5000],len=1,n;//a相当于上文中的f(高精度所以用二维),len存储位数,n见题意

void add(int arr){
    for(int i=1;i<=len;i++) a[arr][i]=a[arr-1][i]+a[arr-2][i];//高精度一位一位加
    for(int i=1;i<=len;i++) if(a[arr][i]>=10){//进位
        a[arr][i+1]+=a[arr][i]/10;
        a[arr][i]%=10;
    }
    if(a[arr][len+1]>0) len++;//位数++
    return ;
}
int main(){
    scanf("%d",&n);
    a[0][1]=1;//初始值,因为f[2]=2=f[1]+1
    a[1][1]=1;
    for(int i=2;i<=n;i++) add(i);//重复计算
    for(int i=len;i>0;i--) printf("%d",a[n][i]);
    return 0;
}

结语
递推是一个极为重要的方法,后面要学习的DP(动态规划)本质上就是分类讨论列出不同情况下的状态转移方程。我是faryou,下次见!