51nod 1120 机器人走方格 V3 【卡特兰数+卢卡斯定理+组合数】
2024-08-26 02:15:10
…我并不知道为什么事卡特兰数,反正用dp打的表就是卡特兰数,因为是两个三角所以再乘个2
卡特兰数使用\( h(n)=\frac{C_{2n}^{n}}{n+1} \)因为范围比较大所以组合数部分用卢卡斯定理来求。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int mod=10007,N=10020;
int n,fac[N],inv[N];
int ksm(int a,int b)
{
a=a%mod;
int r=1;
while(b)
{
if(b&1)
r=r*a%mod;
a=a*a%mod;
b>>=1;
}
return r;
}
int C(int n, int m)
{
if(n<m)
return 0;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int lucas(int n,int m)
{
return m==0?1:C(n%mod,m%mod)*lucas(n/mod,m/mod)%mod;
}
int main()
{
fac[0]=1;
for(int i=1;i<mod;i++)
fac[i]=fac[i-1]*i%mod;
inv[mod-1]=ksm(fac[mod-1],mod-2);
for(int i=mod-2;i>=0;i--)
inv[i]=inv[i+1]*(i+1)%mod;
scanf("%d",&n);
n--;
printf("%d\n",(lucas(n<<1,n)+mod-lucas(n<<1,n-1))%mod*2%mod);
return 0;
}
最新文章
- [深入学习Web安全](5)详解MySQL注射
- Python强化训练笔记(五)——找出多个字典中的公共键
- 【jq】c#零基础学习之路(4)抽象类和密封
- IOS 今天学到太多的知识了,赶快记录下来
- UIStepper
- seeting菜单界面形成--优化
- Amazon S3 上传文件 SSL23_GET_SERVER_HELLO握手错误
- C#获取mac
- poj 2409+2154+2888(Burnside定理)
- J2EE请求和响应—Servlet
- HTML与XML总结
- .Neter玩转Linux系列之六:Linux下MySQL的安装、配置、使用
- js判断当前内容是否为空
- 在 Linux 中自动配置 IPv6 地址
- 在vue2.0中引用element-ui组件库
- UWP简单示例(二):快速开始你的3D编程
- 【HDOJ1598】【枚举+最小生成树】
- tomcat与jmeter
- 三维数组—— 与宝玉QQ群交流 之三
- canvars 画花