摘要: 思路 这是一道 DP 好题,首先要搞清楚 \(dp\) 数组的含义,以及状态转移。 我们 \(dp_{i,j}\) 的含义是:取前 \(i\) 个数,形成 \(j\) 个三元组的最小权值和。 然后我们就可以来推状态转移方程了。 首先 \(dp\) 数组的初始值要设为无穷大,因为我们要求的是最小值所以 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(25) 评论(0) 推荐(0)
摘要: 思路 首先我们可以从左往右扫描一遍,然后从右往左扫描一遍,最后两条扫描出的线,最低的那条线减去 \(p_i\) 就是答案(如图)。 这张图就是我们两次扫描出的结果(红线:从左往右,绿线:从右往左)。 那为什么扫描出的是这样的图呢? 是因为我们在扫描的时候需要做出 3 个步骤: 当 \(p_i > n 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(19) 评论(0) 推荐(0)
摘要: 题意 给定 \(m\) 个小区间,对于一个小区间 \(i\) 可以覆盖 \([l_i,r_i]\)。 现有一个区间 \([1,n]\),现要将这 \(m\) 个小区间放在大区间上,使它们线段覆盖大区间。 求:最少选择多少个小区间才能满足条件。 思路 考虑 DP。 定义 \(dp_i\) 表示某一个区 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(21) 评论(0) 推荐(0)
摘要: 思路 如果 \(a_i\) 在某一个最长上升子序列中,那么,这个最长上升子序列一定是形如 \(\dots,a_p,a_i,a_q,\dots\) 的。 发现 \(a_p < a_i < a_q\),那么以 \(a_p\) 结尾的一串一定是一个最长上升子序列,以 \(a_q\) 开头的一定也是一个最长 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(41) 评论(0) 推荐(0)
摘要: 思路 定义 \(d_{i,j}\) 表示从 \(1\) 走到 \(i\),并且满足 \(t \bmod k = j\) 的最小的符合题意的 \(t\)。 然后就可以直接跑一遍 Dijkstra 即可。 当要计算一条 \(u \to v\) 的边 \(w\) 时,如果当前时间不够无法达到 \(w\), 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(54) 评论(0) 推荐(0)
摘要: 思路 大模拟,按照题意模拟即可。 首先按照 \(\Delta\) 的取值分为 \(3\) 类: \(\Delta < 0\)。 \(\Delta = 0\)。 \(\Delta > 0\)。 对于第 1 种情况,根据题意,输出 NO。 对于第 2 种情况,原方程只会有一个解为 \(\frac{-b} 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(262) 评论(0) 推荐(0)
摘要: 思路 首先发现对于操作 1 显然进行一次就可以将 \(t\) 变为一个回文序列。 那么,不难发现如果进行两次操作 1,在进行一次操作 2,是与进行一次操作 1,在进行两次操作 2 等效的。 所以考虑处理出 \(tt\) 表示 \(t\) 进行操作 1 后的序列。 不妨枚举一个 \(x,y\) 分别表 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(20) 评论(0) 推荐(0)
摘要: 思路 Part 1 考虑 DP。 令 \(dp_i\) 表示 \(N\) 为 \(i\) 时的答案。 则有 \(dp_i = 2 \times dp_{i - 1} + dp_{i - 3}\)。 因为,我们想一想,如果我们的最后一个放的 I 形方块,那么可以放在最前面和最后面,因此我们还需要加上 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(66) 评论(0) 推荐(0)
摘要: 不知道为什么都做这么复杂。 思路 考虑二分第 \(k\) 小的数 \(x\),思考怎么 check。令小于 \(x\) 的数量为 \(num\),则如果 \(num < k\) 则返回 true,否则返回 false。 问题转化为了求 \(num\)。定义 \(dp_i\) 表示分母为 \(i\) 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(17) 评论(0) 推荐(0)
摘要: 思路 标准博弈论,我们假定 \(dp_i\) 表示当前棋子在 \(i\) 的时候,先手必赢为 \(1\),先手必负为 \(-1\),无法确定为 \(0\)。 那么我们看图分析一下: 在终点为 \(5\) 的情况下:不难的出 \(dp_5 = 1,dp_4 = -1,dp_7 = -1,dp_3 = 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(26) 评论(0) 推荐(0)
摘要: 思路 首先有一个比较典的转化,因为本题中,有坐标和时间两种限制,于是考虑离线下来,按照时间依次进行操作。 我们可以考虑二分答案 \(len\) 则 check 函数就是判断 \([x - len,x + len]\) 区间中是否所有 \(k\) 中店铺都出现过。 有一个比较巧妙的方法,记录每一种店铺 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(27) 评论(0) 推荐(0)
摘要: 思路 首先考虑两个瓶子容量分别为 \(x,y\) 互相倒的情况。发现每一次都是将剩余的液体减少 \(x\) 或者 \(y\),因此这两个瓶子的贡献就是 \(ax + by\),其中 \(a,b\) 是常数。 根据裴蜀定理,\(\min\{ax + by\} = \gcd(x,y)\)。拓展到多个数, 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(17) 评论(0) 推荐(0)
摘要: 思路 定义 \(dp_i\) 表示在 \(a_{1 \sim i}\) 中选数,在满足题意的情况下的最长长度。 那么,我们在转移 \(dp_i\) 的时候,可以枚举一个 \(j\) 表示在 \(b\) 中,当前数的上一个数在 \(a\) 中的位置。 如果有 a[i] & a[j] != 0,那么,有 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(28) 评论(0) 推荐(0)
摘要: 思路 区间 DP 好题。定义 \(dp_{i,j}\) 表示将 \(s_{i \sim j}\) 折叠能获得的最短长度。 那么,依旧是枚举一个中间点 \(k\),那么,我们将 \(dp_{i,j}\) 分为了 \(dp_{i,k}\) 和 \(dp_{k + 1,j}\) 两部分。 对于这两部分,可 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(27) 评论(0) 推荐(0)
摘要: 思路 定义 \(dp_{i,j}\) 表示刷前 \(i\) 块木板,花了 \(j\) 次,能够正确粉刷的数量。 那么,显然 \(dp_{i,j}\) 等于 \(dp_{i - 1,j - k}\) 加上第 \(i\) 行刷 \(k\) 次能够正确粉刷的数量。 那么,考虑用另一个 DP 维护。定义 \ 阅读全文
posted @ 2024-06-26 12:37 WBIKPS 阅读(48) 评论(0) 推荐(0)
摘要: 思路 首先,\(A\) 和 \(B\) 只会移动一个,那么,我们分开来算,我们先假定 \(B\) 会动。 不妨令 \(A\) 与 \(b\) 连边的端点为 \(x,y\)。如果有线段 \(pq\) 能与 \(xy\) 相交,一定满足如下其中一条规律: \(p < x \wedge q > y\) \ 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(21) 评论(0) 推荐(0)
摘要: 思路 我们定义 \(dp_i\) 为选取前 \(i\) 个人所得到的最大的价值。 那么,我们能得出一个很简单的状态转移方程: \[ dp_i = \max(dp_j + a \times (\sum_{k = j + 1}^{i}x_i)^2 + b \times (\sum_{k = j + 1} 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(19) 评论(0) 推荐(0)
摘要: 题意 给定一个无向图,问最少在几个点上设置出口,可以使得不管其他哪个点坍塌,其余所有点都可以与某个出口相连。 思路 对于这道题,我们有以下几个技巧: 对于每一个连通块出口数量必须大于等于 \(2\)。 因为,如果出口数量为 \(1\),那么,如果刚好在出口坍塌了,就出不去了。 分别看每一个连通块。 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(46) 评论(0) 推荐(0)
摘要: 简化版题意 有一个四元组:\((x,xk,xk ^ 2,xk ^ 3)\) 满足以下条件: \(k > 1\) \(x \leq m\) \(xk \leq m\) \(xk ^ 2 \leq m\) \(xk ^ 3 \leq m\) 现在给定满足条件的四元组的个数 \(n\),求:最小的 \(m 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(15) 评论(0) 推荐(0)
摘要: 思路 首先,我们考虑 \(k = 0\) 的情况: \[ 1 \times 1 + 1 \times 2 + \dots + 1 \times n + \dots + n \times 1 + n \times 2 + \dots + n \times n \]然后用乘法分配律化简一下,得: \[ 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(22) 评论(0) 推荐(0)
摘要: 思路 我们定义 \(dp_i\) 表示运输前 \(i\) 个工厂,且在第 \(i\) 个位置建立仓库所消耗的最小代价。 那么,我们可以得出状态转移方程: \[ dp_i = \min(dp_j + x_i \times (\sum_{k = j + 1}^{i}p_k) - \sum_{k = j 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(33) 评论(0) 推荐(0)
摘要: 题意 给定一个 \(n\) 表示有 \(n\) 个字符串 \(q\),并且有一个字符串集合 \(S\)。(\(q\) 和 \(S\) 都是未知的) 你需要将 \(q\) 分为若干段,使得每一段都不是 \(S\) 中任意一个字符串的子串。 你可以通过询问至多 \(2n\) 次,形如 ? i j。 它将 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(14) 评论(0) 推荐(0)
摘要: 题意 给定一个 \(n\) 个节点的树,树上的每一个节点都有一个点权,每一条边都有一条边权。 现在你可以在树上任意选定一个起点出发,经过一些节点后返回该节点。 求此过程中的最大价值。(其中,价值为点权之和减去边权之和) 思路 树形 DP,定义 \(dp_i\) 表示以 \(i\) 为起点所能得到的最 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(14) 评论(0) 推荐(0)
摘要: 题意 给定一个长度为 \(n\) 的序列 \(a\),可以循环左移 \(k\) 位,得到新的序列。 求在所有循环左移得到的 \(n\) 个序列中,有多少个序列满足前 \(i\) 个元素的和为非负数。(其中 \(1 \leq i \leq n\)) 注:循环左移 \(k\) 位表示将原序列变为 \(a 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(23) 评论(0) 推荐(0)
摘要: 题意 给定一个 \(n\) 个点 \(m\) 条边的无向图,表示城市的道路状态,有 \(k\) 个出口。 小偷的车位于点 \(b\),\(p\) 是警车位置,警车最高时速是 \(160\),小偷和警车同时出发。 求小偷能安全到达某个高速路口而不被警察抓到的最高速度的最小值。 被抓到表示在某条道路或者 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(24) 评论(0) 推荐(0)
摘要: 题意 给定一个长度为 \(n\) 的序列 \(a\)。 求其中三元逆序对的数量。(即 \(i < j < k\) 且 \(a_i > a_j > a_k\) 的数量) 思路 考虑枚举中间值。 假设当前枚举到 \(i\),那么,当前的 \(i\) 对于答案的贡献就是 \(a_j > a_i\) 的数量 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(25) 评论(0) 推荐(0)
摘要: 题意 给定一个 \(n \times m\) 的字符矩阵 \(a\)。 在矩阵中有两个集合,每个集合的边界是 X(特别的,每个集合有一个点是 A 或 B)。 这两个集合组成了一个维恩图,现在求两个集合的补集,以及并集。(也就是 . 的数量) 注意: 保证了两个集合的两个交点一定是形如下图的: 保证了 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(23) 评论(0) 推荐(0)
摘要: 题意 给定一个数 \(x\),以及 \(n\) 种不同面值的钞票 \(a_i\)。(其中 \(x\) 可能是一个小数,但是 \(a_i\) 一定是整数) 你可以将 \(a_i\) 除以 \(2\),得到新的面值。 如果你能通过这种方式,能够凑出 \(x\),输出 yes,否则输出 no。 思路 首先 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(22) 评论(0) 推荐(0)
摘要: 思路 首先先把原式中的 \(C(i,k)\) 化出来: \[C(i,j) \bmod j = \frac{A^i_j}{j} \bmod j = \frac{i(i - 1)\cdots(i - j + 1)}{j} \bmod j = ((j - 1)! \times \lfloor \frac{ 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(17) 评论(0) 推荐(0)
摘要: 思路 首先考虑只有一个询问,区间为 \([1,n]\) 的做法。 定义 \(dp_i\) 表示前 \(i\) 个数中,以 \(a_i\) 结尾的方案数。容易得到状态转移方程: \[dp_i = 1 + \sum_{j < i \wedge a_j \mid a_i}{dp_j} \]最后的答案就是 阅读全文
posted @ 2024-06-26 12:34 WBIKPS 阅读(19) 评论(0) 推荐(0)