NOIP2023 T4 题解
写出转移方程:
对于转移方程,考虑枚举最后一段跑的段是从哪里开始的:
注意如果
这个转移方程是
(注意离散化后还要数组对应到原来坐标,注意离散化后的转移可能有两种:① 上一个离散点就在前一个 ② 上一个点不相邻)
然后我们发现这玩意可以用线段树优化:线段树第
具体而言:
for (ll i = 1, p = 1; i <= cur; i++) {
while (p < i && rev[i] - rev[p] + 1 > k) //p指向当前第一个在rev[i]-k+1之后的
p++;
for (auto ch: chl[i])
st.mdf(1, 1, st.sz + 1, 1, ch.l + 1, ch.v);
ll tmp = (rev[i - 1] == rev[i] - 1 ? max(0ll, i - 2) : i - 1); //找到上一个决策点
st.mdf(1, 1, st.sz + 1, i, i + 1, g[tmp] + (rev[i] - 1) * d);
f[i] = st.qry(1, 1, st.sz + 1, p, i + 1) - rev[i] * d;
g[i] = max(g[i - 1], f[i]);
}
当
对位置
为什么?我们把
所以我们在每个决策位置
(有点像斜率优化:拆式子,费用提前计算)
还有,数据卡常。不能 map
离散化,要用 sort
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!