hdu2067(卡特兰数)
卡特兰数
就是沿着对角线的那一串数字
公式;
直接这样上公式算是不行的题目要求算到第35个,算到最后由于数字太大计算的过程中就为负了,看图可以发现规律
所以用递推的方式把下三角每一个点的值算出
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
long long dp[40][40];
int main()
{
int n;
int t=1;
for(int i=1;i<=36;i++)
dp[i][0]=1;
for(int i=1;i<36;i++)
{
for(int j=1;j<36;j++)
{
if(i==j) dp[i][j]=dp[i][j-1];
else
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
while(cin>>n&&n!=-1)
{
cout<<t++<<" "<<n<<" ";
cout<<2*dp[n][n]<<endl;
}
}