p1044 栈
今天是线性结构和基础数论的一天!
这个题,呃,实际上它是个递推式,跟栈没有半毛钱关系。
首先,一进一出,f【i】【k】中i表示已进栈i个,已出栈k个时的方案数。
状态转移方程:f【i】【k】=f【i-1】【k】+f【i】【k-1】;
f【i-1】【k】表示它的上一个状态(进栈i-1个,出栈k个)是进了一个数得到现状态的i-1 +1=i
f【i】【k-1】表示它的上一个状态(进栈i个,出栈k-1个)是出了一个数得到的 k-1 +1=k;
#include <iostream> #include <cstdio> using namespace std; int n; int f[19][19]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) f[i][0]=1; for(int i=1;i<=n;i++) for(int k=1;k<=n;k++) if(i==k) f[i][k]=f[i][k-1]; else f[i][k]=f[i-1][k]+f[i][k-1]; printf("%d",f[n][n]); return 0; }