JXOI2017 数列
数列
九条可怜手上有一个长度为 的整数数列 ,她现在想要构造一个长度为 的,满足如下条件的整数数列 :
- 。
- 对于任意 ,令 为 至 中大于等于 的最小值, 为 至 中小于等于 的最大值。 必须满足 。如果不存在大于等于 的,那 么 ;如果不存在小于等于 的,那么 。
现在可怜想要知道共有多少不同的数列满足这个条件。两个数列 和 是不同的当且仅当至少存在一个位置 满足 。
题解
http://jklover.hs-blog.cf/2020/06/06/Loj-2273-数列/#more
dp 计数.
不难发现,合法的选择区间会在选一个数之后不断收缩,将它作为状态记录下来 dp 即可.
设 表示考虑了前 个数,下个数合法的选择区间为 , 最后一个数的值为 的方案数.
转移时,对于 这几段分别转移,每一段内转移到新的 是一样的.
于是修改差分就可以完成 转移,注意处理 不存在等特殊情况,时间复杂度 .
CO int N=160; int t[N],f[2][N][N][N]; IN void trans(int o,int l,int r,int L,int R,int v){ // k in [L,R] if(L>R) return; f[o][l][r][L]=add(f[o][l][r][L],v),f[o][l][r][R+1]=add(f[o][l][r][R+1],mod-v); } int main(){ int n=read<int>(),m=0; for(int i=1;i<=n;++i) m=max(m,read(t[i])); int o=0,bound=t[1]; f[o][0][m+1][1]=1,f[o][0][m+1][bound+1]=mod-1; for(int i=2;i<=n;++i){ for(int l=0;l<=m+1;++l)for(int r=l;r<=m+1;++r) for(int k=l;k<=r;++k) f[o][l][r][k]=add(f[o][l][r][k],f[o][l][r][k-1]); o^=1,bound=t[i]; for(int l=0;l<=m+1;++l)for(int r=l;r<=m+1;++r) for(int k=l;k<=r;++k) f[o][l][r][k]=0; for(int l=0;l<=m+1;++l)for(int r=l;r<=m+1;++r) for(int k=l;k<=r;++k)if(f[o^1][l][r][k]){ int L=max(l,1),R=min(l,bound); trans(o,l,l,L,R,f[o^1][l][r][k]); L=max(l+1,1),R=min(k-1,bound); trans(o,l,k,L,R,f[o^1][l][r][k]); if(k>l){ L=max(k,1),R=min(k,bound); trans(o,k,k,L,R,f[o^1][l][r][k]); } L=max(k+1,1),R=min(r-1,bound); trans(o,k,r,L,R,f[o^1][l][r][k]); if(r>k){ L=max(r,1),R=min(r,bound); trans(o,r,r,L,R,f[o^1][l][r][k]); } } } int ans=0; for(int l=0;l<=m+1;++l)for(int r=l;r<=m+1;++r) for(int k=l;k<=r;++k){ f[o][l][r][k]=add(f[o][l][r][k],f[o][l][r][k-1]); ans=add(ans,f[o][l][r][k]); } printf("%d\n",ans); return 0; }
静渊以有谋,疏通而知事。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2019-06-17 [POI2012]RAN-Rendezvous