摘要: 思路 题目要求的是 \(\max_{a = 1}^{n}\{\sum_{i = 1}^{a}\sum_{j = 1}^{a}{A_j}\}\),所以我们将 \(\sum_{i = 1}^{a}\sum_{j = 1}^{a}{A_j}\) 化简一下,得: \[ i \times A_1 + (i - 阅读全文
posted @ 2024-06-22 10:55 WBIKPS 阅读(19) 评论(0) 推荐(0)
摘要: 思路 首先对于这种题目多半是要先以 \(a_i\) 排序的,这样我们可以消除 \(a_i\) 的限制,只需要考虑 \(b_i\) 的限制即可。 定义 \(dp_{i,j}\) 表示在前 \(i\) 个人中选 \(j\) 个人的合法方案数。但是这样不知道前面选取人的 \(b_i\) 的大小。 因此,重 阅读全文
posted @ 2024-06-22 10:55 WBIKPS 阅读(14) 评论(0) 推荐(0)
摘要: 思路 将小于等于 \(x\) 的元素赋为 \(1\),其余的赋为 \(0\)。那么一个区间内小于等于 \(x\) 的数量就是区间中 \(1\) 的数量。 那么,将区间升序排列就是将 \(1\) 先堆在前面,将 \(0\) 堆到后面;降序排列同理。 考虑动态维护 \(x\) 的位置,记其位置为 \(t 阅读全文
posted @ 2024-06-22 10:55 WBIKPS 阅读(17) 评论(0) 推荐(0)
摘要: 思路 首先对所有的 \(c\) 从小到大排序,然后对于每一个值如果之前能凑出就不选,否则就选。 这样做显然是对的。令 \(p_1,p_2,\dots,p_{2^n-1}\) 表示将 \(c\) 排序之后,对应原来的下标;\(S\) 表示选出数的集合;\(S'\) 表示最终选出数的集合。可以证明两个问 阅读全文
posted @ 2024-06-22 10:55 WBIKPS 阅读(15) 评论(0) 推荐(0)
摘要: 思路 直接将输出的答案分为两个分考虑。 (1) 考虑二分 + DP。 设当前二分出的平均数为 \(x\),如果合法,那么有(其中 \(p\) 为选出数下标的集合): \[ \frac{a_{p_1} + a_{p_2} + \dots + a_{p_k}}{k} \geq x \]即: \[ \fr 阅读全文
posted @ 2024-06-22 10:52 WBIKPS 阅读(36) 评论(0) 推荐(0)
摘要: 思路 定义 \(dp_i\) 表示将前 \(i\) 个分为若干段的价值总和。容易得到状态转移方程: \[ dp_i = \sum_{j = 1}^{i - 1}{dp_j \times (\max_{k = j + 1}^{i}\{a_k\} - \min_{k = j + 1}^{i}\{a_k\ 阅读全文
posted @ 2024-06-22 10:51 WBIKPS 阅读(17) 评论(0) 推荐(0)
摘要: 思路 一眼可以把两个可以交换的数之间建一条边,显然在一个连通块里面的元素可以两两之间交换。 由于是排列,每一个元素 \(i\) 最终的位置是 \(i\)。 考虑将元素从小到大放置,令 \(ad_i\) 表示当前 \(i\) 元素的位置。 现在我们想让 \(i\) 换到 \(i\) 位置上,并且想使用 阅读全文
posted @ 2024-06-22 10:51 WBIKPS 阅读(16) 评论(0) 推荐(0)
摘要: 思路 首先有一个显然的贪心策略,就是先用大面值的,再用小面值的。 因为 \(n \neq 60\),先考虑搜索。 对于搜索到剩余 \(x\) 元,当前用 \(A_u\) 面值的时候。可以分为两种情况: 不找零,其答案为 a = x / a[u] + dfs(u - 1,x % a[u])。 找零,其 阅读全文
posted @ 2024-06-22 10:51 WBIKPS 阅读(24) 评论(0) 推荐(0)
摘要: 思路 首先,转化一下题面,对于每一次操作,相当于在原序列的前缀和数组 \(s\) 中删除一个数。 \(dp_i\) 表示操作 \(1 \sim i\) 能得到的序列个数。 如果 \(a_i\) 在 \(1 \sim i - 1\) 中没有出现过,状态转移方程为 \(dp_i = dp_{i - 1} 阅读全文
posted @ 2024-06-22 10:51 WBIKPS 阅读(21) 评论(0) 推荐(0)
摘要: 思路 首先需要知道一个事情,对于一个数 \(x = \prod{p_i^{c_i}}\),它的约数个数是: \[\prod{(c_i + 1)} \]那么先将 \(\binom{k}{n}\) 展开: \[\frac{\prod_{i = n - k + 1}^{n}i}{k!} \]发现一个数的约 阅读全文
posted @ 2024-06-22 10:51 WBIKPS 阅读(21) 评论(0) 推荐(0)
摘要: 思路 Part 1 弱化版 看到这道题的第一眼想到了 P1012 这道题。 但是,这两道题选择的数量是有区别的。 我们可以由拼数得出一个结论性的排序规则(这里就不多做解释了): inline bool cmp(string a,string b){ return a + b < b + a; } 如 阅读全文
posted @ 2024-06-22 10:50 WBIKPS 阅读(18) 评论(0) 推荐(0)
摘要: 思路 对于每一个 7,我们都可以抽象为这样一个图形: 如果有两个 7,无论它是否有重合部分,红色部分是不需要判断的,只需要看绿色的部分。 因此,我们的问题就简化为了三角形,而不是四边形。 对于所有的 7,都有一个公共顶点:\((0,0)\) 点。 所以,我们可以引出一个叫斜率的概念来判断这些三角形是 阅读全文
posted @ 2024-06-22 10:50 WBIKPS 阅读(16) 评论(0) 推荐(0)
摘要: 题意 给定 \(N\) 个小车,每个小车的编号分别为:\(1,2,\dots,N\)。 现在有 \(Q\) 个操作,每个操作执行 \(3\) 种操作: 1 x y,将 \(x\) 和 \(y\) 相连。(\(y\) 在 \(x\) 之后) 2 x y,将 \(x\) 和 \(y\) 的连接解除。 3 阅读全文
posted @ 2024-06-22 10:50 WBIKPS 阅读(41) 评论(0) 推荐(0)
摘要: 比较符合 CCF 造数据水平的题。 思路 首先可以用两个 vector<pair<int,int>> v[N] 分别将每一行、每一列的元素的权值与编号存储下来。 那么可以对所有的 \(v_i\) 按照权值从小到大排序。那么发现对于所有的满足 v[i][p].fst < v[i][q].fst 的 \ 阅读全文
posted @ 2024-06-22 10:50 WBIKPS 阅读(22) 评论(0) 推荐(0)
摘要: 思路 显然我们需要求出原树的最大匹配。 定义 \(dp_{i,0/1}\) 表示在 \(i\) 为根的子树中进行匹配,且 \(i\) 不选/选 的最大匹配。状态转移方程比较显然: \[\left\{\begin{matrix} dp_{u,0} = \sum{val_v}\\ dp_{u,1} = 阅读全文
posted @ 2024-06-22 10:50 WBIKPS 阅读(21) 评论(0) 推荐(0)