原题传送门
思路:先定义数组和变量,然后令f[0]=1,f[1]=1,默认f[0]=1纯粹是为了满足表达式计算,无实际意义;然后用卡特兰数递推式方可求出从2开始到n的各个f值,最后输出f[n]即可.
卡特兰数原理:令h(0)=1,h(1)=1,catalan数满足递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)h(0) (n>=2)
代码参考
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
int f[MAXN],n;
int main(){
cin>>n;
f[0] = 1, f[1] = 1;
//从2到n按规律递推
for(int i = 2;i <= n;i++)
for(int j = 0;j < i;j++)
f[i] += f[j] * f[i-j-1];//卡特兰数递推式
cout<<f[n];
return 0;
}