每日一刷atcoder开脑 abc154

博客介绍了如何利用简单数位动态规划(DP)解决编程竞赛中的问题,并讲解了一个优化后的组合数学公式,降低了计算复杂度从O(n^2)到O(n)。文章通过举例说明了数位DP的转移方程,并阐述了组合数优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

abc154

题解翻译器 2022-4-30

题目入口

官方题解入口

A题

过于简单,不解

B题

过于简单,不解

C题

过于简单,不解

D题

过于简单,不解

E题

简单数位 d p dp dpdp[i][j][0/1]表示处理到第 i i i 位,已经有了 j j j 个非零数,是否到达上界的方案数。然后直接转移即可。

如果不懂,移步浅学数位dp_Shining_xzl的博客

F题

一个不那么水的组合数学题。

要求的是
∑ i = r 1 r 2 ∑ j = c 1 c 2 ( i + j i ) \sum _{i = r1} ^{r2} \sum _{j = c1} ^{c2} {i + j \choose i} i=r1r2j=c1c2(ii+j)
题解介绍了一大堆关于组合数的入门知识,相信大家都不用看

直接来说结论吧,直接算的复杂度是 O ( n 2 ) O(n^2) O(n2) 的,考虑优化,我们优化第二维,规定 S ( n , m ) = ∑ i = 0 m ( n + i n ) S(n,m) = \sum _{i=0} ^m {n + i \choose n} S(n,m)=i=0m(nn+i)
∑ i = r 1 r 2 ∑ j = c 1 c 2 ( i + j i ) = ∑ i = r 1 r 2 S ( i , c 2 ) − S ( i , c 1 − 1 ) \begin{aligned} \sum _{i = r1} ^{r2} \sum _{j = c1} ^{c2} {i + j \choose i} &= \sum _{i = r1} ^{r2} S(i,c2) - S(i,c1-1) \end{aligned} i=r1r2j=c1c2(ii+j)=i=r1r2S(i,c2)S(i,c11)
考虑如果算 S ( n , m ) = ∑ i = 0 m ( n + i n ) S(n,m) = \sum _{i=0} ^m {n + i \choose n} S(n,m)=i=0m(nn+i)
S ( n , m ) = ∑ i = 0 m ( n + i n ) = ∑ i = 0 m ( n + i − 1 n ) + ( n + i − 1 n − 1 ) = S ( n , m ) − ( n + m n ) + S ( n − 1 , m ) \begin{aligned} S(n,m) &= \sum _{i=0} ^m {n + i \choose n} \\ &= \sum _{i=0} ^m {n + i - 1 \choose n} + {n + i - 1 \choose n - 1} \\ &= S(n,m) - {n + m \choose n} + S(n - 1, m) \\ \end{aligned} S(n,m)=i=0m(nn+i)=i=0m(nn+i1)+(n1n+i1)=S(n,m)(nn+m)+S(n1,m)
然后就有
S ( n , m ) = ( n + m + 1 n + 1 ) S(n,m) = {n + m + 1 \choose n + 1} S(n,m)=(n+1n+m+1)
复杂度就减低到了 O ( n ) O(n) O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值