仔细观察杨辉三角后可以发现从最高点到第n行第k个数的最短路为c(n+1,k);

根据Lucas定理可以求出,一般来说要求答案模去一个质数p且p的范围不大于10^5则可用Lucas.

Lucas(n,m,p)=cm(n%p,m%p)* Lucas(n/p,m/p,p)
Lucas(x,0,p)=1;
另外注意当k>n/2时,必须令k=n-k。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn=10005;
int n,k,p;
int frc[1300][maxn];
int id[maxn];
bool vis[maxn];
int prim[maxn];
int cnt;
void init(){for(int i=2;i<maxn;i++)if(!vis[i]){prim[cnt]=i;id[i]=cnt;for(int j=i*2;j<maxn;j+=i)vis[j]=1;p=i;frc[cnt][0]=1;for(int j=1;j<p;j++)frc[cnt][j]=frc[cnt][j-1]*j%p;cnt++;}
}
int POW(int x,int n,int p){int res=1;while(n){if(n&1)res=res*x%p;x=x*x%p;n>>=1;}return res;
}
int cm(int n,int m,int p){if(m>n)return 0;int x=id[p];int ans=frc[x][n]*POW(frc[x][n-m]*frc[x][m]%p,p-2,p)%p;return ans;
}
int lucas(int n,int m,int p){if(m==0)return 1;int ans=cm(n%p,m%p,p)*lucas(n/p,m/p,p)%p;return ans;
}
int main()
{
//    freopen("in","r",stdin);
    init();int cas=1;while(scanf("%d%d%d",&n,&k,&p)>0){if(k>n/2)k=n-k;int ans=lucas(n+1,k,p)+n-k;printf("Case #%d: %d\n",cas++,ans%p);}return 0;
}

转载于:https://www.cnblogs.com/wshh/p/3987407.html

hdu 3944 DP? (Lucas 定理)相关推荐

  1. 【bzoj2111】[ZJOI2010]Perm 排列计数 dp+Lucas定理

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Mogic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Mogic的,答案可能很 ...

  2. BZOJ 2111 [ZJOI2010]Perm 排列计数:Tree dp + Lucas定理

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2111 题意: 给定n,p,问你有多少个1到n的排列P,对于任意整数i∈[2,n]满足P[i ...

  3. HDU 5226 Tom and matrix(组合数学+Lucas定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5226 题意:给一个矩阵a,a[i][j] = C(i,j)(i>=j) or 0(i < ...

  4. 洛谷P3773 [CTSC2017]吉夫特(Lucas定理,dp)

    题意 满足$b_1 < b_2 < \dots < b_k$且$a_{b_1} \geqslant a_{b_2} \geqslant \dots \geqslant a_{b_k} ...

  5. loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】

    题目链接 loj300 题解 orz litble 膜完题解后,突然有一个简单的想法: 考虑到\(2\)是质数,考虑Lucas定理: \[{n \choose m} = \prod_{i = 1} { ...

  6. 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix

    Tom and matrix Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...

  7. [CTSC2017]吉夫特(Lucas定理,DP)

    送70分,预处理组合数是否为偶数即可. 剩下的数据,根据Lucas定理的推论可得当且仅当n&m=n的时候,C(n,m)为奇数. 这样就可以直接DP了,对于每个数,考虑它对后面的数的影响即可,直 ...

  8. BZOJ4737 组合数问题 【Lucas定理 + 数位dp】

    题目 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3)三个物品中选择两个物品可以有( 1,2),(1,3),(2,3)这三种选择方法.根据组合数的定义,我们可以给 ...

  9. bzoj 1902: Zju2116 Christopher lucas定理 数位DP

    1902: Zju2116 Christopher Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 172  Solved: 67 [Submit][St ...

最新文章

  1. html标签的显示模式(块级标签,行内标签,行内块标签)(转)
  2. 边缘检测(5)Canny算法
  3. 7-1 矩阵链相乘问题 (20 分)(思路+详解+题目解析) 动态规划做法
  4. PHP实现简单文件上传系统
  5. c 语言中的菱形继承,C++中的菱形继承深入分析
  6. 感性精品高清PSD美手分层海报,一键替换,奢华品、首饰、护肤品推荐临摹应用
  7. 网络编程mina介绍
  8. java 下载速度计算_测量Java下载速度
  9. python脚本注册服务+pyinstaller打包exe开机自启动服务
  10. 华为云服务器安装win10系统,云服务器安装win10
  11. logstash 时间获取失败(yyyy-mm-dd失效)
  12. 红米手机root之后 eclipse无法打开data目录
  13. 我们为什么要坚持写博客?
  14. sht11湿度程序c语言,温湿度传感器 sht11 仿真程序下载
  15. 虚拟机xp与Linux 【ping命令】
  16. 指南-安卓/Linux应用指南-RNDIS
  17. CCF CSP/CCSP报名费优惠的方法以及常见疑问
  18. 核心竞争力分析模型(转载)
  19. 带教师端和家长端微信小程序的智慧校园平台源码
  20. FMI人工智能与大数据高峰论坛-北京站

热门文章

  1. react 消息订阅-发布机制(解决兄弟组件通信问题)
  2. LeetCode 2149. 按符号重排数组(双指针)
  3. LeetCode 898. 子数组按位或操作(前缀和思想)
  4. LeetCode 995. K 连续位的最小翻转次数(差分思想)
  5. LeetCode 1181. 前后拼接(哈希map)
  6. LintCode 183. 木材加工(二分查找)
  7. 剑指Offer - 面试题50. 第一个只出现一次的字符(unordered_map)
  8. 冒泡排序和选择排序区别_你以为只是简单的排序?(一)
  9. 【Python基础知识-pycharm版】第七节-函数
  10. 刷新页面,无论点击多少次让Element UI的Message消息提示弹出一个