当前位置: 首页 > article >正文

洛谷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;
}


http://www.kler.cn/news/161464.html

相关文章:

  • JVM中 Minor GC 和 Full GC 的区别
  • React中的空标签与Fragment标签的区别
  • 【数据库设计和SQL基础语法】--表的创建与操作--插入、更新和删除数据
  • Nginx(配置SLL证书)
  • 重生奇迹mu武器镶嵌顺序
  • MySQL学习day05
  • C++ STL容器与常用库函数
  • 一则广告,一个故事,这就我选择学习计算机专业的两个原因
  • 中国证券交易所有哪些
  • vs2022 winform 使用LiveCharts.Wpf控件出现黑框 去除方法
  • zabbix分布式监控平台从IPV4切换到IPV6之监控主机切换
  • 【LeeCode】1.两数之和
  • webpack配置scss loader
  • 【数据库】基于时间戳的并发访问控制,乐观模式,时间戳替代形式及存在的问题,与封锁模式的对比
  • 单片机学习13——串口通信
  • 在 Windows 桌面的redis中远程连接到 VMware 中运行的 Linux 上的 Redis
  • simulinkDFIG风电场风机并网渗透率系统稳定性小信号特征值分析,特征根轨迹分析。四机两区域模型系统
  • 基于B/S架构的医院一体化电子病历编辑器源码
  • Docker的数据卷
  • 使用ApexSQLLog工具恢复数据库
  • 【C语言快速学习基础篇】之一基础类型、进制转换、数据位宽
  • uni-app 微信小程序之好看的ui登录页面(二)
  • idea报错:Error:java: 不允许在使用 -release 时从系统模块 java.xml 导出程序包?
  • 数据收集与处理(爬虫技术)
  • 【QML】QML与cpp交互(一)—— QML直接调用cpp函数
  • 蛋白质序列总特征提取流程
  • 黛姿秘语,匠心之作,严谨工艺铸就完美肌肤
  • 测试新手百科:Postman简介、安装、入门使用方法详细攻略!
  • 多表操作、其他字段和字段参数、django与ajax(回顾)
  • Python入门07循环及常见的数据结构