luogu P1375 小猫(卡特兰数)
题意
(n<=200000)
题解
把DP转移方程写出来,这不是卡特兰数吗?
然后就解决了。
做完这题我发现
DP真是一个好东西。
(公式连乘所以中间要加mod要不爆longlong了)
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 const long long N=150000; 8 const long long mod=1e9+7; 9 long long n,dp[N]; 10 long long ksm(long long x,long long b){ 11 long long tmp=1; 12 while(b){ 13 if(b&1){ 14 tmp=(tmp*x)%mod; 15 } 16 b>>=1; 17 x=(x*x)%mod; 18 } 19 return tmp; 20 } 21 int main(){ 22 scanf("%lld",&n); 23 dp[1]=1; 24 for(long long i=2;i<=n;i++){ 25 dp[i]=dp[i-1]*(4*i-2)%mod*ksm(i+1,mod-2); 26 dp[i]%=mod; 27 } 28 printf("%lld",dp[n]); 29 return 0; 30 }