摘要: 原题链接 在反复拜读题解对于 DP 式子的解释后终于搞懂了,于是来交一发题解,总结一下心得。因此本篇题解主要针对 DP 式的解释。 题目分析 首先,很明显可以设出一个 $dp_{n,k}$ 的状态表示选择 $n$ 个数和为 $k$。 状态转移如下: 若第 $n$ 个数取 $1$,则有 $dp_{n, 阅读全文
posted @ 2023-10-28 17:29 codwarm 阅读(21) 评论(0) 推荐(0)
摘要: ST算法求解LCA 复杂度 $ O(n\log n)$ 引入欧拉序将树上问题转化为一条序列上的最值问题,$id[u]$ 表示该节点在欧拉序中第一次出现的时间,$vis[cnt]$ 存储下标。 欧拉序:A B D B E F E G E B A C A 每访问一个节点都将其存入欧拉序。 例如求 D、C 阅读全文
posted @ 2023-10-28 16:10 codwarm 阅读(27) 评论(0) 推荐(0)
摘要: 题目传送门~ 题目分析 主要思路:枚举每个 $i$,求出对应最佳情况的 $j$ 和 $k$,取最大值。 当 $i$,$k$ 固定时,显然 $E_k-E_i$ 为定值。此时 $E_k-E_j$ 应取最大值,即 $E_j$ 取最小值,$j$ 应取最小值为 $i+1$。 当 $i$,$j$ 固定时,$\f 阅读全文
posted @ 2023-10-27 10:59 codwarm 阅读(13) 评论(0) 推荐(0)
摘要: 题目传送门~ 题目分析 题目要求出不小于 $k$ 位的正整数 $n$ 最小的等差数。 首先考虑 $k$ 位等差数能否成功。枚举第一位和公差 $k$,从而求出每一位的数字,再判断这个数是否大于等于 $n$,因为是从小到大枚举第一位,所以最先得到的等差数一定是最小的,直接输出即可。 若找不到成功的 $k 阅读全文
posted @ 2023-10-14 15:46 codwarm 阅读(28) 评论(0) 推荐(0)
摘要: 题目传送门~ 题目分析 阅读题面,发现题目要求我们求 $l!,(l-1)!,(l-2)!\dots(r-1)!,r!$ 中模 $k$ 意义下最大的数。 发现数据范围为 $1 \le l,r \le 2\times 10^6$,因此直接求得即可。 因为 $n! = 1 \times 2 \times 阅读全文
posted @ 2023-10-05 07:54 codwarm 阅读(31) 评论(0) 推荐(0)
摘要: 题目传送门~ 题目分析 我们发现“从左到右颜色的编号是单调不下降的”,可以联想到经典 DP 问题:最长单调不下降子序列。因此这一题可以参考最长不降序列的写法。 注:本人思路并非最好,但个人认为较好理解。 设计状态转移方程:$dp_{n,m}$ 表示前 $n$ 个选择 $k$ 种颜色获得的最大价值。 阅读全文
posted @ 2023-10-02 21:56 codwarm 阅读(45) 评论(0) 推荐(0)
摘要: 题目传送门~ 题目大意 求从 $n$ 个数中取 $k$ 个数做与运算的最大值。 题目分析 阅读题面,可以知道本题与二进制运算有关,又根据题意,需要求出 $k$ 个数做与运算的最大值,可以想到贪心的思路:从大到小枚举二进制位,若有大于等于 $k$ 个数在当前二进制位上为 $1$,则将当前二进制位对应的 阅读全文
posted @ 2023-09-13 00:49 codwarm 阅读(14) 评论(0) 推荐(0)
摘要: 原题链接 题目分析 本题是一道比较简单的模拟题,根据题意直接模拟即可。 读入数据可以用桶存储牌的数量自动排序。 有几点需要注意一下: 判断“两个人都无法打出牌时”需要注意是连续两人无法打出牌。 在每次进行下一个回合前都需要注意初始化。 具体见代码。 #include<bits/stdc++.h> u 阅读全文
posted @ 2023-08-29 16:28 codwarm 阅读(78) 评论(0) 推荐(0)
摘要: 原题链接 题目大意 给定三个字符串,求三个字符串的最长公共子序列。 题目分析 根据题目,我们发现,这是经典的动态规划题目最长公共子序列 LCS,只不过从二维升到了三维。若还不熟悉 LCS 的题目,可以看看这道题:LCS。 开始分析:首先,本题可以模仿二维最长公共子序列的状态,设计出一个三维的状态 $ 阅读全文
posted @ 2023-08-29 13:55 codwarm 阅读(22) 评论(0) 推荐(0)