牛客练习赛80————C.不降数(翻译翻译官方题解)

题目链接
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=ii a i ai ai是非负整数,求解一共有多少组解,很经典的问题,在这里利用隔板法求解(这里有很详细的举例解释)。然后可以得到题解中第一个公式的左边式子,而如何化到右边则要利用这个公式
就可以化到右边(公式是从0开始的, l = 0 l=0 l=0易得值为1,所以后面有个减一,关于公式的推导和解释看这里
      那么关于第一个公式和整体的推导我们明白了,但是到这里还没完,还有漏洞,这个答案并不是最终答案,我这里不得不吐槽一句,这题解第二个公式上面那句话写的是个啥,让我莫名其妙浪费两个多小时,MMP。
      我们这里还漏了一个很重要的情况,题目要的是满足条件的n位数的个数,那么最高位自然不能为0,而我们之间求解序列个数,是有可能包含最高位为0的序列的,那么自然就要减去最高位为0的所有情况。
      求解最高位为0的情况其实就是求解最高位为0时剩下 n − 1 n-1 n1位的不降数个数,那么完全就是再套一遍第一个公式的推导过程只不过n变成n-1,那么可以得到所有最高位为0的情况个数,相减即可得到最终答案,写成题解那种形式也可以,或者直接写成 C ( n + 8 , 8 ) C(n+8,8) C(n+8,8)
如何求解组合数就不赘述了,板子网上一大堆,就不贴代码了,推导到这里代码不重要了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值