DTOJ 4705. 递增

题意

已知 l 1 … n l_{1\dots n} l1n r 1 … n r_{1\dots n} r1n,求所有满足以下条件的序列 { a n } \{a_n\} {an} 的元素和的和:对任意 i ∈ [ 1 , n ] i\in[1,n] i[1,n] 满足 l i ≤ a i ≤ r i l_i\le a_i\le r_i liairi​​,且 { a n } \{a_n\} {an} 是非严格递增的。

子任务一 ( 30 30 30pts), 2 ≤ n ≤ 6 , 0 ≤ l i ≤ r i < 10 2\le n\le 6, 0\le l_i\le r_i< 10 2n6,0liri<10.

子任务二 ( 30 30 30pts), 2 ≤ n ≤ 50 , 0 ≤ l i ≤ r i < 50 2\le n\le 50, 0\le l_i\le r_i<50 2n50,0liri<50.

子任务三 ( 40 40 40pts), 2 ≤ n ≤ 50 , 0 ≤ l i ≤ r i < 2 60 2\le n\le 50, 0\le l_i\le r_i< 2^{60} 2n50,0liri<260.

题解

我是弱智啊完全不会数数,自闭了。
前面的DP还是比较显然的:把区间离散化一下可以设 f [ i ] [ j ] f[i][j] f[i][j]为前 i i i个区间取了 j j j个数的所有方案的和,再记一个 g [ i ] [ j ] g[i][j] g[i][j]表示方案数辅助转移,转移时考虑第 i + 1 i+1 i+1个区间放几个数,枚举符合条件的 k k k,使得 j + 1 , . . . , k j+1,...,k j+1,...,k都在区间 i + 1 i+1 i+1上,问题在于 n n n个数选 m m m个数,可重复无标号的方案数以及所有方案的和。
方案数考虑把每两个相邻的数的差分加 1 1 1,显然是 C ( n + m − 1 , m ) C(n+m-1,m) C(n+m1,m)。对于所有方案的和,我考场上直接考虑每个位置每个数的贡献,就自闭了,因为有两个组合数乘在一起根本化不开。
此时不应该往复杂方向走(虽然好像可以插值?然而不会),感性认知一下:既然知道方案数了,如果知道平均数就好了,看起来好像就是这 m m m个数的平均数?发现对于一种方案的每个 a i a_i ai,把它变成 n + 1 − a i n+1-a_i n+1ai,再把序列翻转一下也是合法的,且两个方案是彼此唯一对应的。而这两个方案加起来是 ( n + 1 ) ∗ m (n+1)*m (n+1)m,所以 ( n + 1 ) / 2 (n+1)/2 (n+1)/2就是平均数了!组合数因为 m m m很小可以暴算,总复杂度 O ( n 4 ) O(n^{4}) O(n4)。(注意取模和long long的问题!)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值