ATcoder dp

news/2025/2/22 22:10:34/文章来源:https://www.cnblogs.com/VitrelosTia/p/18731518

A

这种就是最典型有阶段,没法贪心的问题。\(f_i\) 表示考虑到第 \(i\) 个石头的答案。\(f_i = \min(f_i-1+v(i-1,i), f_i-2+v(i-2,i))\)

B

和 A 一样的不写了。如果 \(k\) 比较大应该可以权值线段树优化转移。

C

一维记不下就开二维。\(f_{i,0/1/2}\) 表示考虑到第 \(i\) 天,选择了哪种活动。分类讨论转移即可。

D

背包问题。总是被干爆所以写详细一点。设 \(f_{i,j}\) 表示考虑到第 \(i\) 个物品,用的空间 \(\le j\) 的最大价值,\(f_{i,j} = \begin{cases}f_{i-1,j} \\f_{i-1,j-w_i}+v_i \ \ (j\ge w_i) \end{cases}\)

发现可以压掉一维,因为你一个物品只能用一次,所以不能用 \(f_{i,j-w_i}\) 的转移,要从后往前枚举转移。

背包问题的 dp 想法是非常常见的。第二维可以表示你要求限制的东西。

ex : 在 \(n\)\((a_i,b_i)\) 中选出若干个使得 \(\gcd(a_i)=1\) 的同时最小化 \(\sum b_i\)

sol : 考虑把上面那个的第二维改成当前的 \(\gcd\),由于 \(\gcd\) 比较少,直接套个 umap 转移即可。

E

简单 trick,考虑把上面那个东西的第二维和答案换一下,\(f_{i,j}\) 表示考虑到第 \(i\) 个物品,价值为 \(j\) 的最小空间。该怎么转移怎么转移。

F

\(f_{i,j}\) 表示考虑 \(s\)\(i\)\(t\)\(j\) 的答案。\(f_{i,j}=\max\begin{cases} f_{i-1,j}\\ f_{i,j-1}\\ f_{i-1,j-1}+1 \ \ (s_i = t_j) \end{cases}\),输出答案就看决策在哪边就行了。

G

变成拓扑序之后就有转移阶段了,\(f_u = \max\limits_{v\in G_u}f_v+1\)

H

\(f_{i,j}\) 表示当前在 \((i,j)\) 的答案,转移的时候判掉障碍即可。

上面的题其实都没写代码(


上面权当练习 \(\LaTeX\) 了,下面是正题。

I

你直接计算这个胜率是不太现实的,设 \(f_{i,j}\) 表示前 \(i\) 次,硬币向上有 \(j\) 次,\(f_{i,j} = p_if_{i-1,j-1} + (1-p_i)f_{i-1,j}\)

J

期望会不了一点啊。期望有一个可加(线性)性,所以你可以递推求和,把每一步的期望加起来。设 \(f_{i,j,k}\) 表示还有 \(i\) 个剩 \(1\)\(j\) 个剩 \(2\)\(k\) 个剩 \(3\)\(n-i-j-k\) 个剩 \(0\),整理一下可以得到 \(f_{i,j,k} = \dfrac{1}{i+j+k}(if_{i-1,j,k}+jf_{i+1,j-1,k}+kf_{i,j+1,k-1}+n)\)。递推的时候按 \(k,j,i\) 的顺序转移消除后效性。然后期望 dp 还有要做一个事情是从结果反推开头。

K

公平组合游戏。\(f_i=0/1\) 表示你操作 \(i\) 时必败/必胜,显然对于 \(x\) 如果 \(\exists f_{x-a_i} = 0\),那么 \(f_x=1\),初始状态 \(f_{0}=0\) 递推即可。同时,如果 \(\forall f_{x-a_i}=1\),那么 \(f_x=0\),不过这并没有什么必要,因为你初始都是 0。

L

dp 最优化博弈。设 \(f_{l,r}\) 表示 \([l,r]\) 的答案。转移考虑取两边,如果长度为奇数,答案尽量大,取 max 转移,否则,答案尽量小,取 min 转移。

M

先暴力设 \(f_{i,j}\) 表示前 \(i\) 个人,吃了 \(j\) 颗糖,暴力转移
\(\displaystyle f_{i,j}=\begin{cases} \sum_{k=0}^{j}f_{i-1,j} \ \ (j \le a_i)\\ \sum_{k=0}^{a_i} f_{i-1,j-k} \ \ (j > a_i) \end{cases}\)
显然的前缀和形式,优化完就是 \(O(nk)\) 的。可以滚掉一维。

N

这种和区间扩展/缩小有关的考虑区间 dp。设 \(f_{l,r}\) 表示 \([l,r]\) 的答案。枚举断点 \(f_{l,r} = \min(f_{l,k}+f_{k+1,r}+s(l,r))\)\(s\) 为前缀和,预处理即可。

O

这个数据范围考虑状压。设 \(f_{i,s}\) 表示考虑前 \(i\) 个左部点,匹配的右部点状态为 \(s\),每次转移 \(popc(s) = i\) 的状态,\(f_{i,s} \gets f_{i-1,s\oplus 1<<j} (j \in s \wedge j \in G_i)\)。然后就过了,看眼题解似乎可以优化一下复杂度。发现第一维不仅可以滚掉,并且还能被 \(s\) 表示出来,那让 \(i = popc(s)\),时间复杂度和空间复杂度都少了一个 \(n\)

P

树形 dp。设 \(f_{u,0/1}\) 表示以 \(u\) 为根的答案,\(u\) 是黑/白。运用合并儿子信息的想法,设 \(v \in son_u\),分类讨论转移 \(f_{u,0}=\prod f_{u,1}, f_{u,1}=\prod (f_{u,0}+f_{u,1})\)

Q

\(f_i\) 表示考虑到 \(i\),强制以 \(i\) 结尾的答案。暴力转移 \(f_{i}=\max\limits_{h_j < h_i} f_j + a_i\)。直接树状数组优化转移即可。

R

考虑设 \(f_{x,i,j}\) 表示 \(i\to j\) 长度为 \(x\) 的路径数。有 \(\displaystyle f_{x,i,j} = \sum_{k=1}^{n} f_{x-1,i,k} + f_{1,k,j}\),发现这个就是矩阵快速幂优化的形式,直接套上去就对了。

S

数位 dp。设计 dfs(i, now, lim) 表示当前考虑从后往前考虑到第 \(i\) 位,当前余数为 \(now\),是否有顶数字上界。暴力转移,记忆化即可。


以下是较有难度的题目。

T

直观感受会设 \(f_{i,j}\) 表示考虑到 \(i\)\(i\) 填了 \(j\) 的方案数,但是你这样需要保证 \(j\) 没有被填过,于是转而设状态表示当前 \(i\) 排名为 \(j\)。暴力转移 \(f_{i,j}=\begin{cases} \sum_{k=1}^{j-1}f_{i-1,k} \ \ (s_{i-1}=\texttt{<})\\ \sum_{k=j}^{i-1}f_{i-1,k} \ \ (s_{i-1}=\texttt{>}) \end{cases}\),直接前缀和优化转移即可。

U

状压首先考虑 \(f_s\) 表示考虑到状态 \(s\) 的答案,死去的背包开始攻击我,转移就是 \(f_s = \max\limits_{t \in s}f_t+f_{s\oplus t}\)

V

首先这是 dp,其次你要对所有节点求答案,考虑换根 dp,首先有 \(f_u = \prod\limits_{v\in son_u}(f_v+1)\),然后考虑换根造成的影响,他的父亲变成了他的儿子,那么 \(fa\) 少了一个儿子,\(f_{fa} = \dfrac{f_{fa}}{f_u+1}\)\(u\) 多了一个儿子,\(f_{u} = {f_u} \times (f_{fa}+1)\)。没法求逆元所以用前缀和后缀乘积拼起来。

W

考虑设 \(f_i\) 表示考虑到 \(i\) 强制在 \(i\) 放 1,暴力转移有 \(\displaystyle f_{i} = \max(f_{j-1} + \sum_{j \le l_k\le i\le r_k}a_k)\)。考虑线段树优化,在线段树上放 \(f + \sum\),然后扫描线,扫到 \(r_k\) 加上 \([l_k,r_k]\) 的贡献 \(a_k\) 来维护 \(\sum\)\(f\) 就是全局最大值。

X

发现很像一个背包问题,但问题就在还有 \(s\) 的限制。考虑排序解决这一维,然后自然想到邻项交换贪心,考虑剩余的承重能力,如果 \(i\)\(j\) 上面,\(s_i-w_j < s_j-w_i\),即 \(s_i+w_i < s_j+w_j\)。然后设 \(f_{i,j}\) 表示考虑前 \(i\) 个,使用重量 \(\le j\) 的答案。选择 \(i\) 的转移时要注意重量不能超过承重。

Y

地图很大肯定不能直接 dp,但是障碍很少,考虑用总方案减去不合法方案,设 \(d((x1,y1) \to (x2,y2)) = \binom{x2-x1+y2-y1}{x2-x1}\),表示 \((x1,y1) \to (x2,y2)\) 的路径数,设 \(f_i\) 表示走到第 1 个遇到的障碍是障碍 \(i\) 的路径数,则 \(f_i = d((x_i,y_i) \to (n,m))g_i\),其中 \(g_i\) 表示第一个遇到的障碍是障碍 \(i\) 的方案数。有 \(\displaystyle g_i = d(1,1,x_i,y_i) - \sum_{x_j<x_i \wedge y_j<y_i}d(x_j,y_j,x_i,y_i)g_j\),为了保证转移无后效性按 \(x\) 排序。答案即为 \(\displaystyle d(1,1,n,m) - \sum f_i\)

Z

先暴力 dp \(f_i = \min(f_j + h_i^2+h_j^2-2h_ih_j+c)\),这个式子有 \(i,j\) 相乘的项,考虑去凑斜率优化的形式。当 \(j\) 为最优决策点时,有 \(f_i-h_i^2-c=-2h_ih_j+f_j+h_j^2\),此时 \(b = f_i-h_i^2-c,k=2h_i,x=h_j,y=f_j+h_j^2\)\(k\) 单增,要求 \(b\) 最小,单调队列维护一个下凸壳即可。这个压轴题也太板了一点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/888198.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

继承中构造方法访问特点--java 进阶day01

1.子类不可以继承父类的构造方法构造方法的名称必须与类名一致,上图中类名是Zi,而构造方法名是Fu,肯定不行 2.子类在初始化之前,需要对父类初始化 子类在初始化的过程中,很有可能会调用到父类的数据,如果父类没有提前初始化,子类就无法调用这些数据3.通过在子类中访问父…

Mysql莫名其妙爆出拒绝访问问题的原因及解决方案

本文记录使用Mysql作为数据库时发生拒绝访问问题的解决方案Mysql出现拒绝连接问题 ⛄问题原因 : Mysql密码错误,本机上并不是只有一个Mysql服务,我们在开机时启动了并非以前使用的那个Mysql服务,所以造成了密码的错误🌟解决方案 :手动关闭当前正在启用的Mysql服务,尝试找…

Codes 开源 免费 研发项目管理平台 3.0.0 版本发布及创新的轻IPD实现

Codes 是国内首款重新定义 SaaS 模式的开源项目管理平台,支持云端认证、本地部署、全部功能开放,并且对 30 人以下团队免费。它通过创新的方式简化研发协同工作,使敏捷开发更易于实施。采用轻量化的 IPD 模式实现,且融合了敏捷 。轻 IPD 主要解决多项目交付的研发过程管理,…

2025/2/15课堂记录

数字转换,皇宫看守,树上dp,树的直径目录数字转换 皇宫看守数字转换这是一道树的直径题。 首先,树的直径定义是:树上两个结点之间的最短(加权)路中最长的一条路径(和二分答案没关) 但由于贪心思想,这个路径一定起点终点是两片叶子结点如图,这棵树的直径就是5,即节点…

基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真

1.课题概述基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真。利用电压外环PI调节器得到有功 电流指令值结合由负载侧电流检测 到 的无功 电流指令值 ,经由 状态解耦PI调节的电流内环控制器输出直接得到的是输出电压的指令值,用此信号作为采用控制…

【库】Coravel Schedule任务调度

Coravel 通过使高级应用程序功能(如任务/作业调度、排队、缓存、邮件(以及更多!))易于访问且易于使用,帮助开发人员快速启动并运行 .NET 应用程序。具有简单、富有表现力和直接的语法。   下面是简单的用法,通过注入Scheduler和在中间件中定义调度的实现,来完成简单的…

【库】用Rin透视Web请求

Rin 可以捕获对 ASP.NET Core 应用程序的 HTTP 请求,并为捕获的数据提供查看器。它是调试 Web 应用程序(例如,网站、API 应用)的有用工具。先看如下代码:var builder = WebApplication.CreateBuilder(args); builder.Logging.AddRinLogger(); builder.Services.AddRin(); …

【蓝桥训练记录】第 26 场 蓝桥月赛

训练情况赛后反思 这场怎么都是猜猜乐+典题,做不出来的题真的不会了 A题 显然 2025 里面有多少个 15,除法向上取整即可点击查看代码 #include <bits/stdc++.h> // #define int long long #define endl \nusing namespace std;void solve(){cout<<ceil(1.0*2025/15…

光纤三维布里渊温度和应变分布matlab模拟与仿真

1.程序功能描述 光纤三维布里渊温度和应变分布matlab模拟与仿真。其中 , 布里渊散射是光波与声波在光纤中传播时相互作用而产生的光散射过程 , 在不 同的条件下 , 布里渊散射又分别以自发散射和受激散射两种形式表现出来 。 2.测试软件版本以及运行结果展示MATLAB2022A版…

基于一阶梯度的图像亚像素位移matlab仿真,带GUI界面

1.算法运行效果图预览 (完整程序运行后无水印)2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)% --- Executes on button press in checkbox1. function checkbox1_Callback(hObject, eventdata, handles) % hObject handle to…