题目链接:https://vjudge.net/problem/CSU-1320
思路:
一个入的水舀,一个出的水舀,相当于出栈和入栈的顺序。
经典的卡特兰数问题。
因为N并不大,所以我们可以O(N^2)预处理出来结果。
O(1)查询即可。
#include<stdio.h>
#include<string.h>
using namespace std;
#define ll long long int
#define mod 1000000007
ll dp[10005];
void init() ///预处理
{
dp[0]=1;
for(int i=1;i<=10000;i++)
{
for(int j=0;j<i;j++)
{
dp[i]+=dp[j]*dp[i-j-1];
dp[i]%=mod;
}
}
}
int main()
{
init();
int n;
while(~scanf("%d",&n))
{
printf("%lld\n",dp[n]);
}
}