题目链接
https://ac.nowcoder.com/acm/contest/11170/C
官方题解
翻译
第一句话好理解,将原数看成n个数字组成的序列,然后作差分,枚举差分序列的和来求解差分序列的和即为数字的个数,和只有(1-9)九种情况,将所有情况求和即为总数量。
那么目前我们要求解的子问题就是
a
1
+
a
2
+
.
.
.
+
a
n
=
i
(
i
是
差
分
序
列
的
和
)
a1+a2+...+an=i(i是差分序列的和)
a1+a2+...+an=i(i是差分序列的和),
a
i
ai
ai是非负整数,求解一共有多少组解,很经典的问题,在这里利用隔板法求解(这里有很详细的举例解释)。然后可以得到题解中第一个公式的左边式子,而如何化到右边则要利用这个公式
就可以化到右边(公式是从0开始的,
l
=
0
l=0
l=0易得值为1,所以后面有个减一,关于公式的推导和解释看这里)
那么关于第一个公式和整体的推导我们明白了,但是到这里还没完,还有漏洞,这个答案并不是最终答案,我这里不得不吐槽一句,这题解第二个公式上面那句话写的是个啥,让我莫名其妙浪费两个多小时,MMP。
我们这里还漏了一个很重要的情况,题目要的是满足条件的n位数的个数,那么最高位自然不能为0,而我们之间求解序列个数,是有可能包含最高位为0的序列的,那么自然就要减去最高位为0的所有情况。
求解最高位为0的情况其实就是求解最高位为0时剩下
n
−
1
n-1
n−1位的不降数个数,那么完全就是再套一遍第一个公式的推导过程只不过n变成n-1,那么可以得到所有最高位为0的情况个数,相减即可得到最终答案,写成题解那种形式也可以,或者直接写成
C
(
n
+
8
,
8
)
C(n+8,8)
C(n+8,8)。
如何求解组合数就不赘述了,板子网上一大堆,就不贴代码了,推导到这里代码不重要了。
牛客练习赛80————C.不降数(翻译翻译官方题解)
最新推荐文章于 2024-10-01 04:50:10 发布