ICPC2020上海 E题 The Journey of Geor Autumn

Pro:

https://codeforces.com/gym/102900/problem/E

给定n,k

统计长度为n的

满足对于任意i>k , ai>min(ai1,ai2......aik)

的排列方案数

n,k<=107

Sol:

考虑从小到大填入数字

填完1后,2只能填在1后面的k个位置之中

同理,3只能填在1或2后面的k个位置之中

继续下去

发现每一个数字都只能填在

所有比它小的数字所占位置的后面连续k个位置组成的连续段

然后填入它后,又可以使这个连续段变长。

这个过程显然可以通过一个dp来计算

dp[n][m]表示填到数字n,当前连续段的长度为m的方案数

转移考虑使可行连续段长度+1,+2,+3.....+k或-1

用一个前缀和优化即可做到O(n^2)

继续想下去

可以一个更优秀的转移方式

即dp[n]表示当前位置最靠后的数字写在n这个位置的方案数

每次向后转移下一个最后的位置在哪里

然后同时快速计算填写中间空隙的方案数

式子推一下大概张这个样子

f[m]=i=1kf[mi]A(n1(mi),i1)=i=1kf[mi]n1(mi)!(nm)!:f[m](nm1)!(nm)=i=1kf[mi](n(mi)1)!:g[m](nm)=i=1kg[mi]

用一个前缀和优化即可做到O(n)

posted @   Creed-qwq  阅读(353)  评论(2编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2018-12-19 正睿 2019 省选十连测 Day2 T2 车站
2018-12-19 正睿 2019 省选附加赛 Day3 T3 摩尔庄园
2018-12-19 正睿 2019 省选附加赛 Day3 T2 功夫派
2018-12-19 正睿 2019 省选附加赛 Day3 T1 赛尔号
点击右上角即可分享
微信分享提示