杭电多校第八场05_Separated Number(组合数前缀和性质)

这篇博客介绍了如何利用组合数前缀和解决一个数字分割问题,即计算一个数最多分成k段时所有可能分法的贡献和。博主详细解释了递推组合数前缀和的计算方法,并给出了具体的解题步骤,包括如何计算每一位对答案的贡献,以及在不同情况下方案数的计算。最后,展示了如何通过预处理和优化算法提高计算效率。

题目

Separated Number

给出一个数位为 n n n的数字 ( n < = 1 e 6 ) (n<=1e6) (n<=1e6),现在可以将该数字最多分成 k ( 1 < = k < = n ) k(1<=k<=n) k(1<=k<=n)段。定义一种分法的贡献为所有段的数字之和,求所有分法的贡献和。

例如对于样例,答案为 1 + 1 + 10 + 100 = 112 1+1+10+100=112 1+1+10+100=112

3
100

1|0|0 :1+0+0=1  
1|00  :1+0=1  
10|0  :10+0=10  
100   :100

比较容易想到的一种解法是对于每一位,计算它作为个位、十位… …的贡献和。

例如要对于数字 123456 123456 123456,最多可以分成 6 6 6段,要计算 3 3 3作为十位的贡献次数。 我们需要在 4 4 4后面分割一次,还剩下最多 k − 2 k-2 k2次分割机会和 n − 3 n-3 n3个可分割点,方案数显然就是 C n − 3 0 + C n − 3 1 + . . . . . . + C n − 3 k − 2 C_{n-3}^{0}+C_{n-3}^{1}+... ... +C_{n-3}^{k-2} Cn30+Cn31+......+Cn3k2

直接计算方案数时间复杂度过高,需要先掌握组合数前缀和的知识。

递推组合数前缀和

我们先来证明以下公式

C n m = C n − 1 m − 1 + C n − 1 m C_n^m=C_{n-1}^{m-1}+C_{n-1}^{m} Cnm=Cn1m1+Cn1m

证明:

C n m = ( n ) ! ( n − m ) ! × ( m ) ! C_{n}^{m}=\frac{(n)!}{(n-m)!\times (m)!}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hesorchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值