Zhixin Cai

CF1851G Vlad and the Mountains

这是一道关于无向图中能量传递的问题。给定一个无向图,每个点有一个点权表示其高度,从一个点走到另一个点需要消耗对应高度差的能量,如果能量为负值则表示恢复对应绝对值的能量。现在给出多个询问,每个询问包含起点、终点和初始能量,问能否从起点走到终点并保持能量非负。 通过观察可以发现,走过的点的高度不能高于起点高度与初始能量的和。所以问题转化为能否只经过高度不高于 $h_a+e$ 的点到达 $b$。...

CF1862G The Great Equalizer

本题是一道关于序列操作的算法题,需要对给定的初始序列进行排序去重,并通过对数列中不同位置元素加上不同的常数来更新序列。具体实现可以使用 set 和 multiset 分别维护当前数列和相邻两数差距,进而求得最大的相邻两数差距作为总的操作次数。每次操作后输出数列中最大值加上操作次数的结果。 题目大意 有一台机器,他会对一个序列执行以下操作: 对序列排序并去重 如果序列中只剩下一...

CF1856D More Wrong

这道题目是一道关于使用分治算法求逆序对个数的问题。具体思路为:通过二分得到区间中两个部分的最大数位置,然后判断这两个数哪个更大,从而解决问题。 题意 有一个长度为 $n$ 的未知序列,询问 $l,r$ 可以通过花费 $r-l$ 个金币获取 $l$ 到 $r$ 之间逆序对的个数。你需要花费不多于 $5n^2$ 个金币来找到序列中最大数的个数。 思路 用分治来解决。如果询问的区间长度小于...

CF1862F Magic Will Save the World

这道题目要求使用两种魔法(水魔法和火魔法)消灭一组怪物,每个怪物有不同的强度,而魔法的获得速度也不同。通过贪心策略,将尽可能多的水魔法用于消灭怪物,并使用 01 背包预处理得到最大水魔力消耗,然后判断剩余怪物是否能够被火魔法消灭,最终输出最少需要的时间。 题目大意 你有两个魔法,水魔法和火魔法。每秒你分别能获得 $s,f$ 点对应的魔力。现在有 $n$ 个怪物,每个怪物的强度为 $s_i...

CF1862E Kolya and Movie Theatre

这是一道关于电影观看和快乐值的题目。 题目给出了 n 场电影,每场电影能够带来一定的快乐值。但是如果距离上一次观看电影 cnt 天后再观看一场电影,这场电影带来的快乐值会减少 d*cnt(可能减少至负数)。现在要选择不超过 m 场电影观看,使得最终所获得的快乐值最大。 题目大意 有 $n$ 场电影,第 $i$ 场电影能够带来 $a_i$ 的快乐值,但是当距离上一次观看电影 $cnt$ ...

dp初步:以时间序为基准的动态规划

时间不会倒流,时间轴上靠后发生的不会影响前面的事,具有无后效性,因此很多时候结合时间来设状态,并用刷表法进行转移,是一种很好的做法。 例题 CF1840F Railguns 题解博客 这题将某人在第 $k$ 秒能否 停留在点 $(i,j)$ 上设为状态 dp[i][j][k] 进行转移,一个人在某个时间要么停留,要么往右/往下走,于是可以列出更新公式(转移方程)。 P2583 地铁...

路径寻找问题(隐式图)

一些情况下,图不是事先给定,从输入中直接给出的,而是根据实际情况在程序中动态生成的,称为“隐式图”。 路径寻找问题主要是求从某个初状态到某个终状态的最优路径(关键是存在状态间的相互转移,所以可以把状态看作是图上的节点),一般可以转化为隐式图,然后利用图的遍历或者求图的最短路来求解。 例题 隐式图中最短路 CF1846G(把当前的患病状态作为图上的节点,结合每种药的药效用位运算来连边)...