P1976 鸡蛋饼(卡特兰数)

P1976 鸡蛋饼(卡特兰数)

题目传送门

思路:显然是圆连弦问题,答案为卡特兰数,因为 m o d = 1 e 8 + 7 mod=1e8+7 ,可以用费马小定理求逆元或者用递推公式推出都可以。

AC代码:(费马小定理)

#include<bits/stdc++.h>
using namespace std;
const int mod=1e8+7;
typedef long long ll;
ll ksm(ll a,ll n){
	ll ans=1;
	while(n){
		if(n&1) ans=ans*a%mod;
		a=a*a%mod;
		n>>=1; 
	}
	return ans;
}
int main(){
	int n;
	scanf("%d",&n);
	ll a=1,b=1;
	for(int i=2;i<=n;i++) a=a*(i+n)%mod,b=b*i%mod;
	printf("%lld\n",a*ksm(b,mod-2)%mod);
	return 0;
}
	
	

AC代码:递推公式

#include<bits/stdc++.h>
using namespace std;
const int mod=1e8+7;
typedef long long ll;
ll h[3000]={1,1,2};
int main(){
	int n;
	scanf("%d",&n);
	for(int i=3;i<=n;i++)
		for(int j=0;j<i;j++)
			h[i]=(h[i]+h[j]*h[i-1-j]%mod)%mod;
	printf("%lld\n",h[n]%mod);
	return 0;
}
	
	
原创文章 201 获赞 165 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/106070122