题意:
从左下角走到右上角的不越过对角线的最短路径的种类数。
思路:
参见我的那篇卡特兰数全家桶的博客。这道题没说是先往上走再往右还是反过来,所以要输出h[n]*2 。
代码如下:
#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#define ULL unsigned long long
using namespace std;
long long h[36];
void init()
{
int i,j;
h[0]=h[1]=1;
for(i=2;i<36;i++)
{
h[i]=0;
for(j=0;j<i;j++)
h[i]=h[i]+h[j]*h[i-j-1];
}
}
int main()
{
init();
int n;
int time=1;
while(scanf("%d",&n)&&n!=-1)
{
printf("%d %d %I64d\n",time++,n,2*h[n]);
}
return 0;
}