7.16 动态规划
线性DP
[USACO20DEC] Sleeping Cows P
先不考虑极大,将奶牛和牛棚放在一起排序并离散化,设
对于牛棚:
对于奶牛:
考虑极大,一头奶牛可能之后会被匹配,所以我们在加入一头奶牛时就考虑它最终会不会被匹配。
注意到如果废弃了一头奶牛,那么在它之前的牛棚可以被废弃,而在它之后的牛棚不能被废弃。
如果我们去记录一头奶牛被废弃的时间,时间复杂度爆炸,但是我们发现以第一头被废弃的奶牛为分界点,后面的牛棚不能废弃,而之前的可以,所以我们只用关心当前有没有被废弃的奶牛就可以了。
新状态:
对于牛棚:
1.
2.
3.
对于奶牛,讨论废不废弃即可。
1.
2.
3.
4.
时间复杂度:
「KDOI-03」构造数组
我们已经知道总操作步数m
问题等价于,在一个
按行考虑,记
时间复杂度:
Rotating Substrings
一次操作实际上是将
设计状态:
Array Beauty
排序,设
答案即为
枚举一个
可以转移过来的
前缀和优化即可
「USACO 2021.12 Platinum」Paired Up
先考虑T=1即要求最大化匹配权值时我们怎么做
设
三种情况:
-
i不匹配:
-
j不匹配:
-
i与j匹配:
为什么我们在这里不考虑题目所给的极大匹配,因为这里的最优方案只会从极大匹配中产生,如果有没有匹配的,那将他们匹配上显然更优
对于T=2的情况,通过观察,我们可以发现,匹配是不交的,什么叫不交的,即对于
显然我们将
有了这个性质,我们考虑如果要失配的相邻两头牛要满足什么条件:
1.如果相邻是h牛和g牛,那么他们的距离要大于k
2.如果相邻的是同种牛,那么无事发生
状态自然就出来了,仿照T=1时的状态
转移的时候我们去枚举失配牛的位置:
具体的,枚举l为经过的匹配牛的对数
但是时间复杂度仍然是
时间复杂度:
树形dp
Maximizing Root
最终对答案有贡献的因数,都是
Tree Elimination
通过序列可以还原出擦边顺序,记
按(u,v)的出边编号从小到大转移,形式有3种,分别为u擦除前/擦除时/擦除后
巨大分讨,先囤着晚些时候再写
Swap and Maximum Block
将编号-1,插入01trie,发现每次交换其实是对所有深度n-k的点左右儿子翻转。
设
[SDOI/SXOI2022] 小 N 的独立集
没有上司的舞会(最大权独立集问题)加强版
设
考虑从
复杂度分析:
发现
更换状态含义
此时
状压dp
Graph Problem With Small n
题意:给定一张n点简单无向图,对所有点对
直接状压dp,
bitset优化,
将1看作一个中转点,将路径拆成2部分,从1跑一边dp,再用bitset每次处理同一1至起点集合补集的终点
时间复杂度
[THUPC2021 初赛] 密集子图
考虑最短路树,对于深度为i的某个点,深度小于 i−1 的点不能向其边,至少有一个深度为i−1 的点向其连边,对于其他点连向它的边没有限制。
预处理后两种
时间复杂度:
挺卡常的(无论是空间还是时间),不能全局longlong,要精细实现
[省选联考 2021 A/B 卷] 滚榜
对于一个固定的排名,我们可以贪心的去分配
这样暴力(全排列)就有60pts了
考虑刚才的贪心,设计
时间复杂度
状态太多,考虑动刀
那么状态变为
最后对
时间复杂度:
区间dp
[JXOI2018] 守卫
对于一个区间
为了维护p,dp枚举顺序为,r从左向右,l从r到1,保证转移q一个区间时其子区间都已经被转移,同时维护p即可
Long Colorful Strip
因为是按1-n的顺序染色,所以如果在某一时刻染了色,以后就不能在使这种颜色扩张,换言之,如果最终状态这种颜色在这个位置,那么它后来就不能被任何一种颜色覆盖。
假设我们在本次染色中染了
设计
设
我们从小区间开始进行区间dp,也就是说,我们先从晚涂色的区间开始,从编号大往小的颜色去枚举其覆盖区间
枚举最小的颜色涂的区间为
转移时分别把这5段方案数用乘法原理乘起来即可
[USACO23FEB] Piling Papers G
将询问差分,
很自然地,我们想去记录目前拼接情况讨论转移,但是,不是很可行,这启发我们去枚举x对应位上的
转移分讨加在左边还是右边或者什么都不做,对每个后缀做一遍。
时间复杂度:
dp优化
[CEOI2019] 立方填词
考虑去枚举顶点字符,将每条边单词贡献乘起来,此时复杂度:
理论上,一个点如果知道了附近的3个点的字符,那么自己贡献就是已知的
考虑去预处理
具体的,我们定义
此时我们就只需要枚举每层不同对角线上的字符一共4个就可以了
时间复杂度:
Tenzing and Triangle
一个星期前刚写过,三角形是不交的
扫描线+线段树即可
「COCI 2021.11」磁铁
假如我们已经确定磁铁相对顺序,考虑两两之间至少间隔隔板法即可算出方案数
给
状态
最后再考虑空位插入乘上
时间复杂度:
The Knapsack problem
超大杯完全背包
将m分为较均匀的两团,可以证明两团之间大小不会超过
递归到
Wonderful Jump
根号分治,待补
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现