P4707 重返现世

前面的 kthmin-max 容斥的推导到70分做法是平凡的。

当我们写出来一个暴力的时候,我们知道 dp(i,j) 表示选 i 个数,和为 j 的方案数,其系数是 (1)ik(i1k1)mj 的,注意到,这东西仅跟 i,j 有关,但我们又不可能大力转移!所以很困难!

考虑记 dp(x,i,j) 为考虑了前 x 个数,选了 i 个数,和为 j 的方案数,考虑能否把它的容斥系数搞一起转移掉。再记 v(x,j)=i(1)ik(i1k1)dp(x,i,j)

考虑当前选 or 不选这个数。

若不选,则 i,dp(x,i,j)dp(x+1,i,j),即 v(x+1,j)=i(1)ik(i1k1)[dp(x+1,i,j)+dp(x,i,j)],即 Δ=i(1)ik(i1k1)dp(x,i,j)=v(x,j),哦,所以直接能转移!

考虑选。

i,dp(x,i,j)dp(x+1,i+1,j+p),即 v(x+1,i+1,j+p)=i(1)ik(i1k1)[dp(x+1,i,j+p)+dp(x,i1,j)],那么 Δ=i(1)ik(i1k1)dp(x,i1,j)=i(1)i+1k(ik1)dp(x,i,j),考虑拆开组合数,降下 i

i(1)i+1k[(i1k1)+(i1k2)]dp(x,i,j)

分别看。

i(1)i+1k(i1k1)dp(x,i,j)

不难发现,这一部分即 v(x,j)

i(1)i+1k(i1k2)dp(x,i,j)

好难做!因为组合数拆出来跟 i 会有关系。但因为 k 很小,倘若我们记 vk(x,j)=i(1)ik(i1k1)dp(x,i,j),那么上面那个式子就是 vk1(x,j)!!

所以你就做完转移了。

考虑初始,dp(0,i,j) 只有 dp(0,0,0)=1,因此只考虑 i=0,j=0 的情况。

vk(0,0)=(1)k(1k1)

考虑 (1k1)=(1)k1,就你把下降幂带进去,就得到了。

(1)k(1)k1=(1)1=1

因此 vk(0,0)=1,其他 =0

总结,拒绝人类智慧,设个系数暴力转移。


__EOF__

本文作者F x o r G
本文链接https://www.cnblogs.com/xugangfan/p/17242266.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FxorG  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示