#include<cstdio>
#include<cstring>
using namespace std;
long long dp1[36][96],dp2[36][96];
int n,k;
void init()
{
for(int i=0;i<=36;i++)
dp1[i][0]=dp2[i][0]=1;
for(int i=1;i<=36;i++)
for(int j=1;j<=2*i-1;j++)
{
int len1=(i+1)/2*2-1;
dp1[i][j]=(len1-j+1)*dp1[i-1][j-1]+dp1[i-1][j];
int len2=(i+1)/2*2;
dp2[i][j]=(len2-j+1)*dp2[i-1][j-1]+dp2[i-1][j];
}
}
int main()
{
init();
while(~scanf("%d%d",&n,&k)&&(n+k))
{
if(k>2*n-1)
printf("0\n");
else
{
long long res=0;
for(int i=0;i<=k;i++)
res+=dp1[n][i]*dp2[n-1][k-i];
printf("%lld\n",res);
}
}
}
uva 10237 n x n棋盘上放k个棋子 棋子不能在同一斜线上 求总类数
最新推荐文章于 2018-07-19 11:13:45 发布