正题
题目大意
n个东西依次进入一个容量为p的栈,求出栈的序列数量。
解题思路
设fi,jf_{i,j}fi,j表示iii个已经进过栈了(不管还有没有出),jjj个还在栈里。
首先是将现在这个进栈fi−1,j−1f_{i-1,j-1}fi−1,j−1,然后是出栈fi,j+1f_{i,j+1}fi,j+1
方程fi,j=fi−1,j−1+fi,j+1(j≤p)f_{i,j}=f_{i-1,j-1}+f_{i,j+1}(j\leq p)fi,j=fi−1,j−1+fi,j+1(j≤p)
codecodecode
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2010,XJQ=4096;
int n,p,f[N][N];
int main()
{scanf("%d%d",&n,&p);f[1][1]=f[1][0]=1;for(int i=2;i<=n;i++){for(int j=p;j>=0;j--)if(j==0) f[i][j]=f[i][j+1]%XJQ;else f[i][j]=(f[i-1][j-1]+f[i][j+1])%XJQ;}printf("%d",f[n][0]);
}