Lucas定理
文章平均质量分 51
_pkm_
love coding
展开
-
Lucas 定理学习小结,组合数取模
图片中解释了Lucas定理,把n,m表示为质数p的p进制形式,然后各项系数的组合数的乘积就是C(n,m)%p的结果。对于n,m比较大的时候,质数p不太大的时候可以使用Lucas计算。 具体的细节证明可以查阅维基,或者参考挑战上的介绍。当然写熟练了Lucas也可以改成非递归的,也可以把C(n,m)合并到Lucas里面一块计算了。小技巧,一般直接这样计算有可能时间不够,所以通常的做法是先打出阶乘表和逆原创 2016-08-06 10:47:47 · 799 阅读 · 0 评论 -
HDU 5794 A Simple Chess (dp+Lucas组合数取模)
题目链接 这道题目和 CF #313 (Div. 2) E. Gerald and Giant Chess是姊妹题,做法基本一致,不同点事本题走法是“日”的走法,依旧是只能往右下方向。所以需要写一个函数计算(x,y)是否可达,以及有几种走法。 见图: 然后就和CF那道题一样的解法了 #include<cstdio> #include<algorithm> #include<iostream原创 2016-08-06 16:01:02 · 432 阅读 · 0 评论 -
CF #313 (Div. 2) E. Gerald and Giant Chess (dp+Lucas组合计数)
题目链接在一个n*m的网格上从(1,1)出发到(n,m)每次只能往右或者往下一不,同时还给出k个坏点,坏点是不可以走到的,问有多少的方式到大(n,m).经典的题目,记录下来学习,假设目的地是一个特殊的坏点,那么就可以设 dp[i]:表示到达第i个坏点且不经过其他的坏点的方案数。 再看一下这个问题,从(0,0)点到(2,4)点的走法有几个?,答案就是C(2+4,2)或者C(2+4,4)。解释一下,因为原创 2016-08-06 12:59:19 · 481 阅读 · 0 评论