1044 栈
这个题早就弄过,就是用来模拟栈,貌似是在去年的时候做的,还有就是自己比较薄弱的地方就是用栈来模拟表达式,一会再训练一下
输入栈的个数,然后输出合法的出栈序列
这个题很基础,很基础很基础的,定义f[i][j]数组i表示待入栈的元素和待出栈的元素,所以列出来的递推式,就是
f[i][j]=f[i][j-1]+f[i-1][j+1]
这个式子的含义,当前的这个元素入栈的方案数加上这个元素不入栈的最大方案数
也就是两个选择,通过选择来列举方程式子’,两个选择是啥,出去或者不出去
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,f[30][30];
long long dfs(int x,int y)//一个是入栈,一个是出栈
{
if(f[x][y]!=0) return f[x][y];//表示已经
if(x==0) return 1;//表示一种答案
if(y>0) f[x][y]+=dfs(x,y-1);
f[x][y]+=dfs(x-1,y+1);//
}
int main()
{
cin>>n;
cout<<dfs(n,0)<<endl;
return 0;
}