随笔分类 - 题解
摘要:原题链接 众所周知,有如下组合恒等式(由定义证明即可): $$\dbinom{n}{m} = \dbinom{n - 1}{m - 1} + \dbinom{n - 1}{m}$$ 那么令 $f_{p, i} = \sum_{j=1}^i \dbinom{i - j + 1}{p}\times a_
阅读全文
摘要:m显然,对于每个操作,都是将 $a_i$ 变为 $10^9$ 那么假设有一个数列 $b_1, b_2, \ldots,b_n$,求它的建图后的直径。 对于两个点 $l, r$,会有两种走法: 直接走两者相连的边,$\min(b_l,b_{l + 1},\ldots,b_n)$, 先走到外界 $k$,
阅读全文
摘要:先考虑当 $n$ 为奇数的时候, 则 $2, 4, \dots, n - 1$ 为最大限度,所以让这些楼层比两边高即可。 那么 $n$ 是偶数呢?$2, 4, \dots , n - 2$ 为最大限度, 然而最大限度的楼层不止一个! 比方说 $n = 6$,有 $$1 2 1 2 1 1$$ $$1
阅读全文
摘要:首先用一张图引出思路, 由上图的调整方法可以知道,存在一种最优方案, 使得在此方案中第一个让 Doremy 的 IQ 减 $1$ 的比赛 $i$,比赛 $j(i \leq j \leq n)$ 都选择了。 所以从后往前考虑,后 $i$ 个全选所需要的最小代价。 若当前考虑的 $i$ 所需要的代价等于
阅读全文
摘要:由最大公因数,$\gcd(i,a_i) \leq i$,即 $\gcd(1, a_1) = 1$, 而 $\gcd(2, a_2) \leq 2$,所以 $\gcd (2, a_2) = 2$,(因为 $1 = \gcd(1, a_1) \ne \gcd (2, a_2)$)。 即可推出:$\gcd
阅读全文
摘要:这道题思路比较巧妙也比较常见:正难则反。 考虑正推,仿佛要带撤销并查集,反正很难, 面对这种删边问题,一般都是通过倒推的方法变为加边问题,往往会好做。 所以考虑倒推,问题转换为:通过不断加边,则每个点的掉落时间为它第一次与 $1$ 号节点联通的时间,可用并查集维护。 但是,一个问题来了:在一块连通块
阅读全文
摘要:一个位置,要不一直加,要不一直减。 枚举最终 $b_i = 0$ 的 $i$, 那么小于 $i$ 的位置都为负数,大于 $i$ 的位置都为正数, 既然“加”还是“减”的方向都定了,那么就容易了。 思路有了,最好还是自己独立写一写。 #include <cmath> #include <cstdio>
阅读全文
摘要:只考虑 $x$ 取反 $k$ 次的时候($x$ 的取值为 $0/1$): 若 $x \equiv{k}\pmod{2}$,则 $x$ 取反 $k$ 次后会是 $0$; 若 $x \not\equiv{k}\pmod{2}$,则 $x$ 取反 $k$ 次后会是 $1$。 因为高位为 $1$,答案会更优
阅读全文
摘要:假定,$a$ 数组已经排好序了。 设 $f_{l, r}$ 表示 $l$ 到 $r$ 区间建一颗排序二叉树后的最小代价, 枚举 $[l, r]$ 的根 $k$,因为已经有序,所以 $k$ 的左子树 $[l, k - 1]$,就是把 $[l, k - 1]$ 建一颗排序二叉树,所有点的深度总体加 1,
阅读全文
摘要:要连续的 $R$ 最少,即要尽量平分在 $B$ 的空隙里, 有 $b + 1$ 个位置可以填 $R$, 设 $x = \left\lfloor\dfrac{r}{b +1}\right\rfloor,y=r \% (b + 1)$, 显然让前 $y$ 个位置填 $x + 1$ 个,后 $y + 1
阅读全文
摘要:假设筷子按长度排序为 $l_1,l_2,\cdots,l_n$, 可证明任意一组筷子 $(a, b, c) = (l_i,l_{i+1},l_k)$,即 $a, b$ 相邻。 那么 $f_{i, j}$ 表示在 $l_{i}$ 到 $l_n$ 中选出 $j$ 组筷子的最小花费,则 $$f_{i, j
阅读全文
摘要:容易想到区间 dp, 设 $f_{i, j}$ 表示 $i$ 到 $j$ 这段区间中,先后最优的和减去后手最优的和。 (即题目中的在原数组操作改为在 $i$ 到 $j$ 区间操作), 那么考虑一开始取最左还是最有 左端,取完后的区间为 $[i + 1, j]$,那么:$f_{i, j} = a_i
阅读全文
摘要:容易想到设 $f_{i, j}$ 表示前 $i$ 块积木,把它们分成 $j$ 堆柱子后高度之和的最大值 (第 $i$ 块积木在第 $j$ 堆柱子), 然后考虑第 $i$ 块三种情况: 不放,什么都不用做 另起一个柱子,枚举第 $j - 1$ 堆柱子的顶端 $k$,则 $$f_{i, j} = \ma
阅读全文
摘要:此题不可以打表…… 不过通过打表可以发现,每个数最多变换 15 次, 那么枚举一共乘了多少次,设乘了 $p$ 次后离 $0$ 还要多加 $x$ 个 $1$, 直接加肯定不划算, 若在一开始加上 $1$ 再乘 $2$,则最后会额外加上 $2^p$, 若在乘了一次 $2$ 后加 $1$ 再乘 $2$,则
阅读全文
摘要:要差最小,肯定是大的两个相减,再加上小的两个相减,就达到最小了 #include <cmath> #include <cstdio> #include <iostream> using namespace std; typedef long long ll; int a[50], b[50]; in
阅读全文
摘要:考虑 $\gcd(a, b) = \operatorname{lcm}(c, d) = 1$, 则由 $\operatorname{lcm}(c, d) = 1$,得出 $c = d = 1$, 因为 $\gcd(a, b) = 1$,当 $b = 1$ 时会满足条件, 那么 $a = n - 3$
阅读全文
摘要:分析: 若 $s \& t = 0$,则肯定每一位是独立的,考虑第 $i$ 位: $s_i = 0$,则 $t_i$ 可以为 $0$ 或 $1$; $s_i = 1$,则 $t_i$ 必须为 $0$。 考虑把 $s_i$ 的 $0,1$ 对换: $s_i = 1$,则 $t_i$ 可以为 $0$ 或
阅读全文
摘要:首先联想到最短路, 以每个转折点为顶点,两两连一条边,再加上起点与终点,就可以了。 但这样边数至少有 $O(m^2)$,会爆炸, 考虑优化:我们直连一个点与它上下左右相邻最近的点就行了, 举个例子: 有三个转折点:$A(1, 2)$,$B (3, 3)$,$C (4, 7)$,要从 $A$ 走到 $
阅读全文
摘要:跑两遍最短路。 设 $dis_{i,j}$ 表示从 $i$ 走到 $j$ 的最短路径,注意这里不是乘车。 对于每一个在 $i$ 位置的司机, 如果 $dis_{i,j} \leq t_i$,则 $i$ 司机就可以从 $i$ 开到 $j$,花费为 $c_i$, 我们就再建一个图,若能乘车从 $i$ 到
阅读全文
摘要:若有序,必须单增。 设前 $i$ 个的最大值为 $pre_i$,后 $i$ 个的最小值为 $suf_i$, 若要使得有序,满足操作后 $a_{len}$ 与 $a_{len+1}$ 有序,即 $a_{len} < a_{len+1}$, 而操作后,$a_{len}$ 是前 $len$ 的最大值,$a
阅读全文
浙公网安备 33010602011771号