题目
给出一个数位为 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 k−2次分割机会和 n − 3 n-3 n−3个可分割点,方案数显然就是 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} Cn−30+Cn−31+......+Cn−3k−2。
直接计算方案数时间复杂度过高,需要先掌握组合数前缀和的知识。
递推组合数前缀和
我们先来证明以下公式
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=Cn−1m−1+Cn−1m
证明:
C n m = ( n ) ! ( n − m ) ! × ( m ) ! C_{n}^{m}=\frac{(n)!}{(n-m)!\times (m)!}

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

被折叠的 条评论
为什么被折叠?



