【AGC013E】Placing Squares

Description

给你一个大小为m的集合S,S中不包含n。
现在对于一个正整数序列
a[1]…a[k],如果序列之和为n,且不存在s[i]属于集合S就是合法的,s表示a的前缀和。
这样的序列贡献是 ki=1a[i]2 ∏ i = 1 k a [ i ] 2 ,求所有合法序列的贡献和。
m<=10^5,n<=10^9

Analysis

首先有个naïve的dp,大概是 f[i]=i1j=0f[j](ij)2 f [ i ] = ∑ j = 0 i − 1 f [ j ] ∗ ( i − j ) 2 xS,f[x]=0 ∀ x ∈ S , f [ x ] = 0
反正我是不会优化,考虑组合意义?从 (ij)2 ( i − j ) 2 入手,这东西相当于把2个不同的球随便放入i-j个箱子的方案数,然后我们有总共n个箱子,可以在某些箱子之间分隔开
于是可以设 dp[i][0..2] d p [ i ] [ 0..2 ] 表示 i i <script id="MathJax-Element-333" type="math/tex">i</script>所在的一段中已经放入了0..2个球,这样转移是线性的了
既然是线性的就可以写成转移矩阵,快速幂一下就没了,复杂度O(mlogn)
调试了很久,最后发现是转移矩阵手抖打错,气死。。。
感觉20道题做不完啊要凉凉

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值