HDU 3944 DP? 【组合数取模+阶乘预处理】
来源:互联网 发布:担保交易网站源码 编辑:程序博客网 时间:2024/05/22 01:48
题意:从杨辉三角顶部走到的第n行第m列有很多种走法,求出这些走法中所经过的数之和的最小值。
首先稍加分析得出答案的组合表达式
C(n+1,m+1,p)+m (mod p) 这是在2m>n时的结果(若不是变换一下m=n-m)
然后就是套用模板实现,首先p是每组数据不同,但是p<10^4,素数非常有限,为避免超时可以先打一个素数表(得出这个范围内的素数不超过1300个),然后针对每个素数算出阶乘表与逆元表。
上述办法在空间复杂度上将将好,代码如下:
#include<stdio.h>#include<string.h>typedef long long LL;LL fac[10005][10005]; //阶乘表LL inve[10005][10005]; //素数表int p[1300],num=0;int vis[10005];void cpnl() // cpnl means creat prime number list{memset(vis,0,sizeof(vis));for(int i=2;i<=10000;i++)if (!vis[i]){p[num++]=i;for(int j=i;j<=10000;j+=i)vis[j]=1;}}LL qmod(LL a,LL b,LL mod) //快速幂{ LL ans=1; a=a%mod; while(b) { if(b&1==1) ans=ans*a%mod; a=a*a%mod; b>>=1; } return ans;}LL inv(LL a,LL p) //求a在模p下的乘法逆元(p是素数){ return qmod(a,p-2,p);}void cal_table() //计算阶乘表{ for(int n=0;n<num;n++) { fac[p[n]][0]=inve[p[n]][0]=1; for(int i=1;i<p[n];i++) { fac[p[n]][i]=fac[p[n]][i-1]*i%p[n]; inve[p[n]][i]=inv(fac[p[n]][i],p[n]); } }}LL C(LL n,LL m,LL p) //组合数{ if(n<0 || m<0 || m>n) return 0; if(n==m) return 1; return fac[p][n]*inve[p][m]%p*inve[p][n-m]%p;}LL Lucas(LL n, LL m,LL p){ if(m == 0) return 1; return C(n % p, m % p,p) * Lucas(n / p, m / p,p) % p;}int main(){ cpnl(); cal_table(); LL n,m,p; int t=1; while(~scanf("%lld%lld%lld",&n,&m,&p)) { if(n-m>m) m=n-m; printf("Case #%d: %lld\n",t++,(Lucas(n+1,m+1,p)+m)%p); } return 0;}
0 0
- HDU 3944 DP? 【组合数取模+阶乘预处理】
- 组合数取模,预处理阶乘逆元模板
- hdu 3944 (预处理组合数Lucas
- HDU 3944-DP?(Lucas定理+预处理)
- hdu 3944 DP? (预处理+卢卡斯定理)
- HDU3944 DP? (LUCAS定理+阶乘预处理)
- hdu 5106 组合数预处理
- HDU 3944 DP?------Lucas 大组合数取余
- [HDU 3944] DP?组合数 Lucas定理
- hdu 4791 dp预处理+二分
- HDU 4455 Substrings(预处理+dp)
- Hdu 5317 RGCDQ (dp+预处理)
- hdu 5651 (组合数学 + 阶乘求逆元)
- HDU 4832 组合计数dp
- hdu 5396 区间dp+组合
- hdu 6143 组合数学+dp
- hdu 4681 String (dp预处理+枚举)
- hdu 4568 Hunter(spfa预处理 + 状压dp)
- Android第二十课;DataPicker与TimePicker
- 1.26.1
- @weakify @strongify 对 __weak typeof(self) _self = self;的宏定义
- 浏览器通过Scheme协议启动APP中的页面
- UVa714 Copying Books
- HDU 3944 DP? 【组合数取模+阶乘预处理】
- mysql利用双重url编码绕过防火墙
- toast
- php导出excel(多种方法)
- 欢迎使用CSDN-markdown编辑器
- Hdu 1161
- 学习FreeRTOS(1):实验环境
- Js代码和Java代码之间的互相调用了
- 学习笔记