P4360 [CEOI2004] 锯木厂选址
令 表示仅在 位置修建一个锯木厂的最小费用, 表示从山脚到 位置的距离, 表示从山顶到 位置的木材重量和,可以直接预处理出来。
那么第二个锯木厂修建在位置 的费用就是 。
考虑两个转移点 ,若 对于当前位置 更优,那么:
随着 增大单调不降,维护 的下凸包。
P2120 [ZJOI2007] 仓库建设
令 表示在 工厂建立仓库, 工厂不建立仓库的最小费用。对成品数量 做一遍前缀和。
转移直接枚举上一个建立的仓库位置:
考虑两个转移点 ,若 对于当前位置 更优:
随着 增大单调递增,维护 的下凸包。
可惜这个做法被 hack 了,因为 可能为 ,最后一个工厂不一定要建仓库,所以不能在前面就把后面的贡献计算好。
令 表示只考虑前 个工厂并在 工厂建立仓库的最小费用。
转移直接枚举上一个建立的仓库位置:
令 表示 的前缀和数组,然后对 做一遍前缀和:
考虑两个转移点 ,若 对于当前位置 更优:
随着 增大单调递增,维护 的下凸包。
如果中途出现了分母为 的情况,斜率应视为无穷大乘上纵坐标差的符号。因为下凸包横坐标相同时应保留纵坐标较小的点,加入一个纵坐标更小的点时队首会被弹掉,加入一个纵坐标更大的点时队尾会被弹掉,所以始终只保留了纵坐标最小的一个点。
最后答案就在最后一个 的位置到 中。
P3195 [HNOI2008] 玩具装箱
令 表示前 个玩具都已经放入容器的最小费用。对一维长度 做一遍前缀和。
转移直接枚举上一段结尾:
考虑两个转移点 ,若 对于当前结尾 更优:
为了避免式子太长,设
随着 增大单调递增,维护 的下凸包。
P3648 [APIO2014] 序列分割
首先分的顺序不影响最后的总得分。假设三块内部的元素和分别是 ,显然 。每次分三块讨论就可以适用于所有情况。
令 表示前 个元素分成 块的最大总得分。对元素 做一遍前缀和。
外层枚举 ,转移就枚举分界点,把当前这一块新加入进去:
考虑两个转移点 ,若 对于当前分界点 更优:
随着 增大单调不增,维护 的上凸包。
因为 选不选无所谓,所以这题可以删去所有 来避免出现分母为 的情况。当然,如果大于 的元素太少了,就把没选过的那些空位塞进来即可。
P3628 [APIO2010] 特别行动队
令 表示前 个士兵组成特别行动队的最大修正战斗力之和。对初始战斗力做一遍前缀和。
转移还是枚举上一组结尾:
考虑两个转移点 ,若 对于当前结尾 更优:
随着 增大单调递减,维护 的上凸包。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现