题解:P2822 [NOIP2016 提高组] 组合数问题

本文介绍了一道关于组合数的编程问题,涉及计算给定条件下的组合数对满足特定模数的情况。文章介绍了使用杨辉三角的递推公式和容斥原理进行优化,将查询时间复杂度降低至O(1)。

原题链接:P2822 [NOIP2016 提高组] 组合数问题

题目描述

组合数 ( n m ) \binom{n}{m} (mn) 表示的是从 n n n 个物品中选出 m m m 个物品的方案数。举个例子,从 ( 1 , 2 , 3 ) (1,2,3) (1,2,3) 三个物品中选择两个物品可以有 ( 1 , 2 ) , ( 1 , 3 ) , ( 2 , 3 ) (1,2),(1,3),(2,3) (1,2),(1,3),(2,3) 这三种选择方法。根据组合数的定义,我们可以给出计算组合数 ( n m ) \binom{n}{m} (mn) 的一般公式:

( n m ) = n ! m ! ( n − m ) ! \binom{n}{m}=\frac{n!}{m!(n-m)!} (mn)=m!(nm)!n!

其中 n ! = 1 × 2 × ⋯ × n n!=1\times2\times\cdots\times n n!=1×2××n;特别地,定义 0 ! = 1 0!=1 0!=1

小葱想知道如果给定 n , m n,m n,m k k k,对于所有的 0 ≤ i ≤ n , 0 ≤ j ≤ min ⁡ ( i , m ) 0\leq i\leq n,0\leq j\leq \min \left ( i, m \right ) 0in,0jmin(i,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值