洛谷P1044栈(DP)
题目背景
栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。
栈有两种最重要的操作,即poppoppop(从栈顶弹出一个元素)和pushpushpush(将一个元素进栈)。
栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。
题目描述

宁宁考虑的是这样一个问题:一个操作数序列,1,2,...,n1,2,...,n1,2,...,n(图示为1到3的情况),栈AAA的深度大于nnn。
现在可以进行两种操作,
将一个数,从操作数序列的头端移到栈的头端(对应数据结构栈的pushpushpush操作)
将一个数,从栈的头端移到输出序列的尾端(对应数据结构栈的poppoppop操作)
使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下图所示为由1231 2 3123生成序列2312 3 1231的过程。

(原始状态如上图所示)
你的程序将对给定的nnn,计算并输出由操作数序列1,2,…,n1,2,…,n1,2,…,n经过操作可能得到的输出序列的总数。
输入格式
输入文件只含一个整数n(1≤n≤18)n(1≤n≤18)n(1≤n≤18)
输出格式
输出文件只有111行,即可能输出序列的总数目
输入输出样例
3
5
这题实际上是卡特兰数,既然标签是DP就考虑DP解法。设dp[i][j]表示i个数还没入栈,j个数在栈里,n-i-j个数已经出栈的最大方案数,则转移方程可以写出:dp[i][j]=dp[i-1][j+1]+dp[i][j-1]。要么选择把一个数入栈,要么选择一个数出栈。注意当j=0时即栈内没有数,这时候只能选择把一个数入栈。然后看边界,当i=0时,所有数要么在栈内要么已经出栈,这时候只有一种情况,所以赋值为1。要求的是dp[n][0]
所以i从1~n,j从0~n-i进行更新。可以看出,这个题是从结果(出栈序列已知的方案数)向初始情况更新。
#include <bits/stdc++.h>
using namespace std;
int dp[][]={};//dp[i][j]表示i个数还没入栈,j个数在栈里,n-i-j个数已经出栈的最大方案数 dp[i][j]=dp[i-1][j+1]+dp[i][j-1] //dp[0][j]=1 所有数都在栈里 只有一种方式
int main()
{
int n;
cin>>n;
int i,j;
dp[][]=;
for(j=;j<=n;j++)dp[][j]=;
for(i=;i<=n;i++)//注意是从1开始
{
for(j=;j<=n-i;j++)
{
if(j!=)dp[i][j]=dp[i-][j+]+dp[i][j-];
else dp[i][j]=dp[i-][j+];
}
}
cout<<dp[n][];
return ;
}
洛谷P1044栈(DP)的更多相关文章
- 洛谷P1044 栈(Catalan数)
P1044 栈 题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要 ...
- 洛谷——P1044 栈
P1044 栈——卡特兰数 题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈) ...
- 洛谷 - P1044 - 栈 - 简单dp
https://www.luogu.org/problemnew/show/P1044 由于是用标签搜索进来的,所以这道题一定是有dp的解法. 很显然规定每次加入元素之前可以从栈中清理出任意数量的元素 ...
- 洛谷P1044 栈
之前看这题还是一头雾水,现在看:啊啊啊lydnb! 思考了一段时间,发现可以用DP. 令f[i]表示有i辆车时的方案数. 我一开始考虑的是在后面加车,可是这样搞不出状态转移方程来. 然后我考虑从前面加 ...
- 洛谷 p1044 栈 【Catalan(卡特兰数)】【经典题】
题目链接:https://www.luogu.org/problemnew/show/P1044 转载于:https://www.luogu.org/blog/QiXingZhi/solution-p ...
- 洛谷 P1044 栈
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...
- 洛谷教主花园dp
洛谷-教主的花园-动态规划 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ...
- 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp
洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...
- AC日记——栈 洛谷 P1044
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...
随机推荐
- 发邮件python
import smtplib #smtplib是python的一个内置库,所以不需要用pip安装 mailhost='smtp.qq.com' #把qq邮箱的服务器地址赋值到变量mailhost上 q ...
- Vue.js 源码目录设计(二)
Vue.js 的源码都在 src 目录下,其目录结构如下. src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台的支持 ├── se ...
- SMTS Silicon Design Engineer Location: Beijing, Beijing, CN
https://jobs.amd.com/job/Beijing-Physical-Design-Engineer-Beij/603603700/?locale=en_US What you do a ...
- 常用excel函数公式及操作示例
一.数字处理 1.取绝对值 =ABS(数字) 2.取整 =INT(数字) 3.四舍五入 =ROUND(数字,小数位数) 二.判断公式 1.把公式产生的错误值显示为空 公式:C2 =IFERROR(A2 ...
- Django 初试水(二)
这部分链接上一部分.将建立数据库,创建第一个模型,并主要关注 Django 提供的自动生成的管理页面. 打开 mysite/setting.py 文件.这包含了 Django 项目设置的 Python ...
- Python之路Day07
基础数据类型补充 str s.capitalize() -- 首字母大写 s.title() -- 每个单词首字母大写 s.swapcase() -- 大小写转换 s.center() -- 居中/填 ...
- adb 连接手机
adb kill-server adb start-server 可能会遇到问题华为手机: 有应用遮挡了权限请求界面,设置应用无法验证你的回应 系统导航关闭悬浮球 然后重启adb server ad ...
- Codeforces Round #570 (Div. 3) B. Equalize Prices
原文链接https://codeforces.com/contest/1183/problem/B 题意:进行Q组测试,在每组中有长度为n的数组a[i],然后现在给你一个K,问你找到一个bi使得|ai ...
- Mac升级后如何查看自己的网络端口
OS X 10.9 下面 网络实用工具 从实用工具目录里消失了,可能这个程序用的人太少就取消了吧.但是对于做互联网的人还是有点用的. 参考http://www.mamicode.com/info-de ...
- vue组件引入
/src/route/index.js import Demo2 from '@/pages/demo2/index.vue' { path : '/demo2', name : 'demo2', c ...