Typical DP Contest 社论
站❤长❤推❤荐
洛谷题单 . 可以做做 .
有小数的精度要求都是 大概 . 图默认是简单图 .
A. コンテスト
给序列 ,问在 中选若干数加起来能得到多少不同的数 .
.
01 背包即可,实现的好的话时间复杂度 .
B. ゲーム
两个堆 ,Alice 和 Bob 轮流操作,每次选一个堆取出堆顶,每个人都想要让自己取出的数之和最大 . 问 Alice 最后取出的数的和是多少 .
两个堆的大小均不大于 .
比较朴素,类似 AtCoder DP 26 题的 L. Deque,时间复杂度 .
C. トーナメント
个人打淘汰赛(形如一棵满二叉树),其中第 个人 Elo Rating 为 .
人 和人 对战,人 获胜的概率为 ,问最后每个人获胜的概率 .
.
令 表示第 轮后第 个人存留的概率,则不难得到转移:
其中 表示第 轮能和 比赛的人, 表示 赢 的概率 .
时间复杂度 .
D. サイコロ
将一个六面骰子掷 次,问每次掷得点数之积为 的倍数的概率 .
, .
因为只有六面,所以乘积肯定只有素因子 ,那么考虑令 表示掷 次,最终 因子的次数分别为 的概率 . 那么可以朴素转移 .
时间复杂度 .
E. 数
计数 内数位和是 的倍数的数的数量,对 取模 .
, .
和 AtCoder DP 26 题的 S. Digit Sum 是完全一致的题目 .
考虑数位 DP,令 表示到第 位且目前数位和 ()的答案,然后可以朴素转移 .
时间复杂度 .
F. 準急
选 中的若干数,计数选择方案,要求满足:
- 选中 .
- 不能选中连续的 个数 .
对 取模 .
.
令 表示选 且不选 / 选 的方案数,那么有转移:
时间复杂度 .
G. 辞書順
给一个长为 的字符串 ,求其字典序第 小的非空子序列,重复(字符串本质不同当且仅当看起来不一样)只算一次,不存在输出
Eel
.,,字符集为小写字母 .
不难想到按位考虑,所以其实只需要算 中强制选 的本质不同子序列数量 .
考虑在子序列自动机上 DP . 具体的,令 表示 之后第一个 的位置, 表示 中强制选 的本质不同子序列数量 . 考虑重复情况只计算选择位置字典序最小的那个,于是可以得到转移:
不过 的真实值可能很大,可以和 取 min,不会丢失需要的信息 .
时间复杂度 ,其中 是字符集大小 .
H. ナップザック
个物品,每个物品有质量、价值和颜色 . 要求放入一个背包中,容量上限为 ,颜色种类数上限为 ,求最大价值和 .
,, .
令 表示选 中的颜色,选了 种颜色,质量和为 的答案,那么在 加入 肯定颜色种类数多 1,于是就可以简便处理颜色种类数了 . 转移类似 01 背包转即可 .
时间复杂度 .
I. イウィ
给一个长度为 的仅含
i
,w
的字符串 ,每次可以删一个子串iwi
,问最多能删几次 ..
令 表示 是否能被删空,可以朴素区间 DP 处理 .
那么把所有 值为 的区间全部拿出来,就变成了选若干不交区间使得其并的大小最大的问题,可以反悔贪心做 .
经过一些简单分析可以知道时间复杂度为 .
J. ボール
个物品,第 个在 处 . 向坐标 扔球时,均匀随机击中坐标 中的一个 . 问在最优策略下期望扔球多少次能打倒所有物品 .
, .
令 表示打到 内所有物品的期望步数,则考虑投 位置期望扔多少步:
那么解出 后做转移 即可 .
时间复杂度 .
K. ターゲット
如果一组圆满足前面的圆总是严格包含于后面的圆,则称其为一个靶子,且大小为圆的数量 .
现有 个圆,第 个圆心为 ,半径为 . 问选若干个圆最大可以组成多大的靶子 .
.
其实就是若干区间问最多可以嵌多少层,两个区间 满足条件当且仅当 . 那么按 排序后找最长下降子序列即可 .
时间复杂度 .
L. 猫
只猫,第 只在位置 ,满足 是单调递增的实数序列 . 猫 和猫 的友好指数为 ,猫 的幸福指数是与其距离不超过 的猫和她的友好指数之和 .
现给定 ,对于任意序列 ,问所有猫幸福指数和的最大值 .
.
首先把答案除以 2,那么对于 令 表示 距离不超过 时 的最大答案,则:
动态记一下前面的 max 就可以 转移了 .
时间复杂度 .
M. 家
层图,每层图都一模一样,有 个点,从 层的 号点到 层的一号点,每次可以做下列操作之一:
- 沿着边走一步 .
- 层数减一 .
问不经过相同点的方案数,对 取模 .
,,8s .
就是经典问题 AtCoder DP 26 题的 R. Walk 的简单变形 .
首先求出矩阵 ,其中 是 到 的简单路径条数,则答案即为 .
比较小,于是 可以状压求 . 时间复杂度 .
N. 木
给一棵 个点的树,一种加边顺序是合法的当且仅当任意时刻所有边的端点全部连通 . 求合法加边顺序数,对 取模 .
.
考虑枚举最开始删哪条边,然后划分为两个子树的话就比较容易了,因为有删边顺序是从祖先到后代 . 对于每棵子树分别 DP 求出方案数后合并即可 . 转移可以考虑依次合并子树 .
那么只需要考虑如何合并子树,若子树 内的边数分别为 ,方案数分别为 ,则看成格路计数即可得到合并后的方案数为 .
时间复杂度 .
O. 文字列
给序列 ,问小写字母 出现 次的字符串数量,对 取模 .
.
首先二项式反演,令 为钦定 个位置的方案数,那么考虑依次加入每个字母 .
那么整个字符串就被分成 个连续段,枚举钦定位置数后分成若干连续段,分割方案数可以用组合数描述,那么可以得到转移:
那么答案即为:
时间复杂度 ,其中 是字符集大小 .
P. うなぎ
给一棵 个点的树,求选出 条至少包含两个顶点的链,且任意两条链在顶点上不交的方案数,不一定要覆盖整棵树 .
,。
令 表示 子树内选 条链,其中:
- : 未被链覆盖 .
- : 是一条直链上深度最大的点 .
- : 在一条直链上 .
- : 在一条非直链上 .
转移略,时间复杂度 .
Q. 連結
个 01 串 ,找几个按任意顺序拼接,一个字符串可以选多次,问拼出来的本质不同的长为 的串个数,对 取模 .
,, .
和 SDOI2009 学校食堂那个题差不多 .
本质不同比较难处理,那么就考虑一位一位的拼出最终字符串,那么因为字符串长度都比较小,于是只需要维护最近 位的状态和分隔符即可 .
具体的,令 表示长为 的字符串,最后 位状态为 ,拼接分隔符状态为 的串个数,转移相对平凡,不表 .
时间复杂度 ,其中 ,可以通过 .
R. グラフ
给 个点的有向图,选两条路径(不用简单),最大化被覆盖过的点的总数 . 只需输出最大数量 .
.
首先缩点变成 DAG 上问题 . 考虑加虚拟源汇点 后变成找 到 的两条路径 .
于是令 表示两条路径 的最大覆盖总点数,枚举出边转移即可 .
时间复杂度 ,可以通过 .
S. マス目
给一个 网格,将其黑白染色,要求:
- 染黑色 .
- 存在一条从 到 的只经过黑色点的路径 .
求方案数,对 取模 .
, .
肯定是按列考虑,不过只维护目前列的状态不能统计答案 . 把网格划分为若干黑色连通块,限制就是 处于同一连通块内,则可以考虑记录从属于连通块的状况 .
具体的,因为只有最多 6 行所以最多 3 个连通块,对于四进制数 ,0/1/2/3 分别表示白位置,和 连通和两个别的连通块 . 表示处理到前 列,第 列状态为 的方案数 . 注意因为我们只关注 1 所以 2, 3 其实是无序的需要人为钦定一个顺序 . 转移就枚举一列状态并查集维护连通性即可 .
不算并查集复杂度,看起来时间复杂度是 的,也不是不能过 . 不过可以分析到更小一点,暴搜可以知道 时合法的状态 的数量 ,所以离散化后可以得到准确时间复杂度是 ,这是远小于 的 .
T. フィボナッチ
如下定义序列 :
给定正整数 ,求 . 对 取模 .
, .
算行列式或者直接看答案 OGF 的分母就知道特征多项式:
然后暴力做 Fiduccia 算法后面的部分就行了,时间复杂度 .
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/17398205.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】