洛谷P1044 [NOIP2003 普及组] 栈 递归方法

目录

核心:

问题转化:

状态转化:(你得先读懂题,理解我们要干什么)

对应不同情况下的状态转化:(比如栈空就不能出栈,,)

AC代码:


题目:

P1044 NOIP2003 普及组 栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

核心:

这道题我当时根本不会做,甚至看半天题解看不懂,所以写一下懂后的理解

这道题递归的话一定要明确"状态"

当操作序列里没有数的时候,本次的输出序列就定死了

这个时候就可以递归结束,返回1了(即1种情况)

问题转化:

然后问题就转化成了,看有多少种"操作序列为空"情况。

(那是否可以趋近于操作序列为空呢?这个也是看题目的操作过程了)

状态转化:(你得先读懂题,理解我们要干什么)

我们设i 为++操作序列内数的数目++ ,j 为++栈内数的数目++。

这个时候对应题目的两种操作:

1.入栈 i-1 , j+1

2.出栈 j-1

i 和 j 会有且仅有这两种变化。

对应不同情况下的状态转化:(比如栈空就不能出栈,,)

当i == 0时,结果就定死了,就返回0

当i != 0 , j != 0时,这个时候,可以入栈,也可以出栈 (有的题解说"入栈立马出",这个相当于我们当前回合选择入栈,然后下一回合选择出栈)

当j == 0的时候,你没法出栈啊,栈都空了,所以你只能入栈

AC代码:

复制代码
long long dfs(int i,int j)
{
	if (i == 0)
		return 1;
	if (j == 0)
		return dfs(i - 1, j + 1);
	else
		return dfs(i - 1, j + 1) + dfs(i, j - 1);
}

int main()
{
	int n;
	cin >> n;
	cout << dfs(n,0);
	return 0;
}
相关推荐
草莓熊Lotso2 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
HPtiger8 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训8 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen8 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy8 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
丑梨数据8 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
把我格子衫拿来9 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
无忧.芙桃9 小时前
C++语言原理与实践(十六):多态机制讲解
开发语言·c++·多态
erzong23110 小时前
Linux操作系统:线程概念与控制
linux·算法
wuminyu11 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++