题解 P4798 [CEOI2015 Day1] 卡尔文球锦标赛
1.题解 P3204 [HNOI2010] 公交线路2.题解 P1081 [NOIP2012 提高组] 开车旅行3.题解 P1477 [NOI2008] 假面舞会4.题解 P5234 [JSOI2012] 越狱老虎桥5.题解 P6544 [CEOI2014] Cake6.题解 P4041 [AHOI2014/JSOI2014] 奇怪的计算器
7.题解 P4798 [CEOI2015 Day1] 卡尔文球锦标赛
8.题解 P4799 [CEOI2015 Day2] 世界冰球锦标赛9.题解 P1295 [TJOI2011] 书架10.题解 P6281 [USACO20OPEN] Social Distancing S11.题解 P1190 [NOIP2010 普及组] 接水问题12.题解 P3976 [TJOI2015] 旅游13.题解 P8096 [USACO22JAN] Drought G14.题解P7302 [BZOJ2131][NOI1998] 免费的馅饼15.题解 [BZOJ3307] P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并16.题解 [BZOJ3339] P4137 Rmq Problem / mex17.题解 [SP179][BZOJ2919][Poi1998]Word equations18.题解 P5930 [POI1999] 降水19.题解 BZOJ2720: [Violet 5]列队春游20.题解P3830 [SHOI2012]随机树21.题解 P4755 Beautiful Pair22.题解 P9229 扩展九连环23.题解 P7165 [COCI2020-2021#1] Papričice24.题解 P7169 [eJOI2020 Day1] Exam25.题解「JOI 2014 Final」IOI 馒头26.题解 P9911 [COCI 2023/2024 #2] Kuglice27.题解 P6356 [COCI2007-2008#3] CUDAK28.题解 P7309 [COCI2018-2019#2] Kocka29.题解 P6548 [COCI2010-2011#2] IGRA30.题解 P6491 [COCI2010-2011#6] ABECEDA洛谷。
题意
一共有
给出一个满足条件的序列,问它是所有序列中字典序第几小的。
分析
我们从前往后枚举每一个人的组别,可以发现,我们当前这个人的组别要么是前边出现过,要么是出现过的最大组 +1。
同时我们观察一下字典序的比较方式:找到第一个不同的地方,然后只需要判断这两个位置大小关系即可。
由这两个发现我们可以打出我们的第一个暴力。
inline int dfs(int now,int mx,int flag) { if(now==n+1) return 1; int up=flag?a[now]:(mx+1),res=0; for(int i=1;i<=up;++i) { res+=dfs(now+1,max(mx,i),flag&&(i==a[now])); res%=MOD; } return res; }
时间复杂度:
有没有觉得这段代码非常之熟悉,没错就是很想我们的数位 DP。
承接数位 DP 的思路,我们再加上一句记忆化。
时间复杂度与空间复杂度都达到了 好像时间能卡到 )。
正解
可以发现,我们算法的瓶颈其实是在空间上,因此我们需要将其转化到我们的递推上,然后再加上滚动数组,就变成了
flag=!flag; memset(f[flag],0,sizeof f[flag]); for(int j=1; j<=i; ++j) { for(int k=1; k<=j+1; ++k) f[flag][j]=(f[flag][j]+f[!flag][max(j,k)])%MOD; } if(i>1) { for(int j=1; j<a[i]; ++j) { ans+=f[!flag][max(mx[i-1],j)]; ans%=MOD; } }
可以发现,我们的第一个循环是可以优化的,当
for(int j=1; j<=i; ++j) f[flag][j]=(f[!flag][j]*j%MOD+f[!flag][j+1])%MOD;
现在的时间复杂度优化到了准
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?