题意:将n个互异的元素通过【一个栈】后输出,栈的容量不超过m,求输出时不同的方案数。
题解:a[i][j]表示累计入栈了i个元素,累计出栈了j个元素时的方案数。易得a[i][j]由a[i][j-1]和a[i-1][j] 转移得来
题解:a[i][j]表示累计入栈了i个元素,累计出栈了j个元素时的方案数。易得a[i][j]由a[i][j-1]和a[i-1][j] 转移得来
#include<cstdio>
#include<cstring>
const int mod=1000000007;
#define N 1005
int a[N][N];
int n,m;
void doit()
{ memset(a,0,sizeof(a));
for (int i=0;i<=m;i++)
a[i][0]=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=i;j++)
if (i-j<=m)
a[i][j]=(a[i-1][j]+a[i][j-1])%mod;
printf("%d\n",a[n][n]);
}
int main()
{
int i=0;
while (~(scanf("%d%d",&n,&m))) {i++;printf("Case %d: ",i);doit();}
return 0;
}