CF403D Beautiful Pairs of Numbers

题意:
在一个长度为n的序列中,找k个长度互不相同的区间互不重叠,求方案数。
其实每个区间长度不等是个很烦的限制。
不如按照从小到大排序,最后再打乱即可。
发现还可以保证所有区间相邻,即前一个区间的右边界,就是下一个区间的左边界-1,这样把剩下的空格填充进去即可。
问题转化为:
区间总长度为 i i i,里面放入 j j j个相邻的区间,前面比后面小,有多少种方法。
感觉这个dp挺妙的。
f i + j , j + = f i , j f i + j + 1 , j + 1 + = f i , j f_{i+j,j}+=f_{i,j}\\f_{i+j+1,j+1}+=f_{i,j} fi+j,j+=fi,jfi+j+1,j+1+=fi,j
表示所有区间一起增加1或者一起增加1后在前面加入一个大小为1的区间(由于可能最小的区间大小为1,所以要先加。可以证明一定能包含所有情况)。
然后从k到n枚举总区间长度,假设为n’。
把一个区间看成一个球,加上后面的剩下n-n’的空位,一共有n-n’+k个球,随意排列
所以答案加上 f n ′ , k × ( n − n ′ + k k ) × k ! f_{n',k} \times \binom{n-n'+k}{k} \times k! fn,k×(knn+k)×k!即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值