Loading

记录「十一月做题记录」

水题记录。


11.2

P5663 加工零件

题面

题解

发现若 \(s\)\(t\) 一条路径长度为 \(d\) ,那么可以通过在一条边上反复折返使得存在一条长度为 \(d+2k,k\in \N\) 的从 \(s\)\(t\) 的路径。分路径长度的奇偶求出最短路即可。


11.3

P2515 [HAOI2010]软件安装

题面

题解

发现是一个基环树森林,环上的点要么都选,要么都不选,于是可以把环缩成一个点。

缩完点后的图一定是一个森林,可以把所有树根连接到一个虚拟节点上形成一棵树。这样直接树形DP是 \(O(nm^2)\) 的。可以用DFS序优化到 \(O(nm)\)

在树上DFS,求出后序遍历的DFS序,在DFS序上DP。

\(\mathrm{dp}(i,j)\) 表示考虑到后序遍历的 \(i\) 号结点,背包容量为 \(j\) 时,所能取得的最大价值。设 \(\mathrm{size}_i\) 表示以 \(i\) 为根的子树的大小。

  • 若取物品 \(i\) ,则可以取它的子树,所以答案为 \(\mathrm{dp}(i-1,j-1)+v_i\)
  • 若不取物品 \(i\) ,则不可以取它的子树,则答案为 \(\mathrm{dp}(i-\mathrm{size}_i,j)\)

综上可得 \(\mathrm{dp}(i,j)=\max(\mathrm{dp}(i-1,j-w_i)+v_i,\;\mathrm{dp}(i-\mathrm{size}_i,j))\)

P5858 「SWTR-03」Golden Sword

题面

题解

\(\mathrm{dp}(i,j)\) 表示考虑到第 \(i\) 个原料,当前锅中有 \(j\) 个原料的最大耐久度之和。则有:

\[\mathrm{dp}(i,j)=\max_{j-1\leq k\leq \min(w,j+s-1)}\{\mathrm{dp}(i-1,k)\}+j\times a_i \]

单调队列优化即可。

P5020 货币系统

题面

题解

完全背包。

将面值从小到大排序,依次加入。若当前的面值能用之前的面值表示,那么这个面值就是无用的,可以舍去。维护一个背包即可。

P4878 [USACO05DEC]Layout G

题面

题解

差分约束。

判断有无解是基础操作,重点是后两个询问。

因为必须要满足三角形不等式,所以其实从 \(1\)\(n\) 的路径长度其实是确定的。具体一点,若有多个点能够到达点 \(v\) ,为了满足三角形不等式,必须选择这些点中 \(dis_u+w(u,v)\) 最小的点走,发现这就是最短路。

从虚拟源点跑一遍最短路判断有无解,再从 \(1\) 号点跑最短路,得出的 \(dis_n\) 即为所求。

CF804B Minimum number of steps

题面

题解

手玩几组数据不难发现:\(a\) 的数量总是不变的。我们从左往右扫这个字符串,若遇到一个 \(b\) ,将它前面的 \(a\) 全部移到它后面去。因为扫到这个 \(b\) 时,前面所有的 \(a\) 已经通过前面的 \(b\) 移到了当前字符串的末尾,这样保证了新加入的 \(b\) 一定能够将它之前的 \(a\) 移到后面去。

通过手玩数据,不难发现另一个结论:若 \(b\) 前面有 \(c\)\(a\) ,那么将这 \(c\)\(a\) 全部移到后面去的操作次数为 \(\sum_{i=1}^c2^{i-1}\) 。预处理出这个和式,统计答案。


11.4

CF1366D Two Divisors

题面

题解

假如已经选出了两个因数 \(x,y\) ,满足 \(\gcd(x+y,a)=1\)

\(d=\gcd(x,y)\) ,设 \(x'=\frac{x}{d},y'=\frac{y}{d}\) ,可以得到式子 \(\gcd(d\times (x'+y'),a)=1\) 。因为 \(x,y\) 都是 \(a\) 的因数,那么 \(d\) 也是 \(a\) 的因数,则 \(\gcd(d\times(x'+y'),a)\geq d\) 。为了满足 \(\gcd(d\times (x'+y'),a)=1\) ,一定有 \(d=1\) ,则有 \(x\bot y\)

\(a\) 分解质因数,\(a=\prod_{i=1}^mp_i^{c_i}\) ,取 \(x=p_1^{c_1},y=\frac{a}{x}\) 即可。

P5651 基础最短路练习题

题面

题解

由所有简单环的异或和都为 \(0\) 可知,两点之间的所有简单路径的长度都是相同的。那么只需要随意求出一条路径即可。

CF1445D Divide and Sum

题面

题解

考试的时候没推出来/kk。

\(a\) 数组升序排序,令 \(L=\{a_1,a_2,\cdots,a_n\},R=\{a_{n+1},a_{n+2},\cdots,a_{2n}\}\)

有结论:将 \(a\) 分成任意两个集合 \((p,q)\) ,对于任意的 \(i\)\(x_i\)\(y_i\) 不会同时在 \(L\) 或者 \(R\) 中。

证明:

假设 \(x_i\)\(y_i\) 同时在 \(L\) 中。因为 \(p,q\) 中元素单调,那么有 \(i\) 个元素小于等于 \(x_i\) ,有 \(n-i+1\) 个元素小于等于 \(y_i\) ,并且它们互不重合,由于小于等于 \(x_i,y_i\) 的元素只能在 \(L\) 中,得出 \(L\) 中有 \(n+1\) 个元素,与上文矛盾。

证毕。

那么 \(f(p,q)\) 的值就是一定的,答案即为:

\[f(p,q)\times {2\times n \choose n} \]


11.5

P2662 牛场围栏

题面

题解

同余最短路板子题。

求出 \(d_i\) 后,答案即为:

\[\max_{0\leq i<\mathrm{base}}d_i-\mathrm{base} \]

CF1443B Saving the City

题面

题解

相邻的两个极长 \(1\) 串只有两种消除方法,要么花费 \(2\times a\) 的代价分别消除,要么先将两串中间的 \(0\) 串变为 \(1\) ,再一起消除。在两种方法中取最优即可。

P5520 [yLOI2019] 青原樱

题面

题解

考虑先提出放树苗的 \(m\) 个位置,剩下 \(n-m\) 个位置,树苗要放在这些位置的 \(n-m+1\) 个空位中,所以答案为 \(A_{n-m+1}^m\)

P2467 [SDOI2010]地精部落

题面

题解

\(f_{i,j}\) 表示使用数 \(1\sim i\)\(j\) 在第一个位置且为山峰的方案数。有转移:

  • \(j-1\) 不在第二个位置,那么交换 \(j\)\(j-1\) 依然合法,则 \(f_{i,j}=f_{i,j-1}\)
  • \(j-1\) 在第二个位置,考虑去掉第一个位置的数 \(j\) ,剩下有互不相同的 \(i-1\) 个数,且 \(j-1\) 在第一个位置且为山谷。为了使 \(j-1\) 变成山峰,考虑将这 \(i-1\) 个数中每一个数 \(x\) 变为 \(i-x+1\) ,此时依然合法,并且 \(j-1\) 这个位置变成了山峰(此时 \(j-1\) 变成了 \(i-j+1\) ),则 \(f_{i,j}=f_{i-1,i-j+1}\)

综上,有 \(f_{i,j}=f_{i,j-1}+f_{i-1,i-j+1}\)

最后的答案即为 \(2\times \sum_{i=1}^nf_{n,i}\)


11.6

CF1442A Extreme Subtraction

题面

题解

如果这个序列是单调不增的,那么可以通过不断操作前缀使得整个序列变为 \(0\) 。考虑通过操作后缀使得整个序列变为单调不增。从后往前考虑,设当前枚举到了 \(i\) ,后缀 \([i+1,n]\) 已经变为单调不增,若 \(a_i\geq a_{i+1}\) ,那么无需操作;否则将后缀 \([i+1,n]\) 整体减 \(a_{i+1}-a_i\),使得 \(a_i=a_{i+1}\) ,若 \(a_n\) 减到了 \(0\) 以下,那么无解。

CF920F SUM and REPLACE

题面

题解

约数个数是 \(\log\) 级别的,也就是说对一个数操作 \(\log\) 次就可以使得这个数再次操作时不再变化。用线段树维护区间内还能操作的数的个数,暴力修改即可,复杂度 \(\Theta(n\log^2 n)\)

P4823 [TJOI2013]拯救小矮人

题面

题解

较矮的人一定先出去,所以先按照每个人的高度从小到大排序。考虑在排好序的数组上DP,令 \(\mathrm{dp}(i)\) 表示考虑到第 \(i\) 个人时,离开了 \(j\) 个人后人梯的最大高度,从左往右依次考虑每一个人,若能出去就出去,更新DP数组:\(\mathrm{dp}(i,j)=\mathrm{dp}(i-1,j-1)-a_i\)

P4306 [JSOI2010]连通数

题面

题解

Floyd求解传递闭包板子,用bitset优化一下即可。


11.7

P6801 [CEOI2020]花式围栏

题面

题解

用单调栈维护高度单调上升的矩形。每次加入一个新矩形时,若栈顶的矩形高度小于等于当前矩形,让当前矩形直接入栈;否则,降低栈顶矩形的高度,同时不能破坏栈内的单调性,统计降低的高度对答案的贡献。

P5689 [CSP-SJX2019]多叉堆

题面

题解

用并查集维护树的形态,同时对于每一个树根维护答案 \(\mathrm{F}\) 和子树大小 \(\mathrm{siz}\)

若将 \(y\) 接在 \(x\) 下面,则以 \(x\) 为根的堆的答案 \(\mathrm{F}'(x)=\mathrm{F}(x)\times \mathrm{F}(y)\times {\mathrm{siz}(x)+\mathrm{siz}(y)-1 \choose \mathrm{siz}(y)}\)

P5687 [CSP-SJX2019]网格图

题面

题解

将边权相同的边一起考虑,从小到大加入边,判断最多能加入几条边即可。


11.8、11.9、11.10

因为CSP-S爆炸,自闭三天


11.11

P7043 「MCOI-03」村国

题面

题解

发现最后会在两个点之间反复横跳,判断最后停在那个点即可。另外只有一个点的情况需要特判。

CF1443B Saving the City

题面

题解

考虑一段1是和上一段1一起消掉,还是自己消掉,取最优值即可。


11.12

考试


11.13

P3937 Changing

题面

题解

手玩一下样例发现每个数的贡献是杨辉三角的第 \(t+1\) 层,预处理组合数即可。因为只需要知道奇偶性,所以只需要预处理组合数的奇偶即可。


11.14

买了gmoj的号,感觉有点小贵。

GMOJ100137 胖头鱼的排序

题面

题解

题解

GMOJ1021 【中山市选2008】矩阵

题面

题解

直接乘显然爆炸,但是由于是01矩阵,很容易就能想到用bitset压位。复杂度 \(\Theta(\frac{n^3}{w})\)


11.15

P1850 换教室

题面

题解

考虑DP,令 \(\mathrm{dp}(i,j,0/1)\) 表示考虑到第 \(i\) 个时间段,已经申请了 \(j\) 次,第 \(i\) 次有没有申请。分类讨论一下第 \(i\) 和第 \(i-1\) 个时间段分别有没有申请即可。

GMOJ6806 achen

题面

题解

要多看部分分的提示。

先考虑 \(A=1,B=n\) 怎么做。令 \(\mathrm{f}(i)\) 表示遍历 \(1\sim i\) 的方案数,有转移式 \(\mathrm{f}(i)=\mathrm{f}(i-1)+\mathrm{f}(i-3)\)

考虑一般情况,如果 \(A\not =1\) ,那么从 \(A\) 出发一定要先遍历 \(1\sim A-1\) ,否则后面就遍历不到了,发现有且只有一种方案从 \(A\) 出发遍历完 \(1\sim A-1\) 后到达 \(A+1\) 。同理,到达 \(B\) 之前一定要先遍历 \(B+1\sim n\) ,方案也只有一种。\(A+1\sim B-1\) 的部分用部分分的做法即可。


11.16

GMOJ6866 minmax

题面

题解

考虑点分治。假设由某个分治中心 \(x\) 开始,计算出了两条路径 \(x-u\)\(x-v\) ,它们的边权最大值分别为 \(\mathrm{Max}_1,\mathrm{Max}_2\) ,最小值分别为 \(\mathrm{Min}_1,\mathrm{Min}_2\) ,分类讨论 \(u-v\) 何时能够成为答案:

  • \(\mathrm{Max_1}-\mathrm{Min_1}<k,\mathrm{Max_2}-\mathrm{Min_2}<k\) ,假设 \(\mathrm{Max_1}>\mathrm{Max_2}\) ,那么有 \(\mathrm{Max_1}-\mathrm{Min_2}=k\) ,移项得 \(\mathrm{Max_1}-k=\mathrm{Min_2}\) ,可以用桶记一下所有的 \(\mathrm{Min}\) ,枚举 \(\mathrm{Max}\) 在桶中查询。
  • \(\mathrm{Max_1}-\mathrm{Min_1}=k,\mathrm{Max_2}-\mathrm{Min_2}\leq k\) ,可以得到 \(\mathrm{Max_2}\leq \mathrm{Max}_1\leq \mathrm{Min}_2+k\) ,开一个值域线段树记录 \(\mathrm{Max}\) ,查询时查询区间 \([\mathrm{Max_2},\mathrm{Min}_2+k]\) 的区间和。

注意当 \(\mathrm{Max_1}-\mathrm{Min_1}=k,\mathrm{Max_2}-\mathrm{Min_2}=k\) 时会算重,需要处理一下。


11.17

上午纪中考试,下午和晚上调T3


11.18

CF1404B Tree Tag

题面

题解

发现只有两种情况 \(\text{Alice}\) 会赢:

  • \(\mathrm{dis}(a,b)\le da\) ,即 \(\text{Alice}\) 能一步跳到 \(\text{Bob}\)
  • \(2\times da\geq \min(len,db)\) ,即 \(\text{Alice}\) 能把 \(\text{Bob}\) 逼到死角,因为 \(\text{Bob}\) 跳跃的距离不能超过直径,所以要对直径 \(len\)\(\min\)

GMOJ1022 【中山市选2008】小树

题面

题解

降智题

考虑两个点 \(x,y\) ,假设 \(\frac{w_x}{d_x}<\frac{w_x+w_y}{d_x+d_y}\) ,得:

\[\begin{aligned} \frac{w_x}{d_x}&<\frac{w_x+w_y}{d_x+d_y}\\ w_xd_x+w_xd_y&<w_xd_x+w_yd_x\\ w_xd_y&<w_yd_x\\ \end{aligned} \]

能够得到:

\[\frac{w_x}{d_x}<\frac{w_y}{d_y} \]

再做一些变形,还能得到:

\[\begin{aligned} w_xd_y&<w_yd_x\\ w_yd_y+w_xd_y&<w_yd_y+w_yd_x\\ \frac{w_x+w_y}{d_x+d_y}&<\frac{w_y}{d_y} \end{aligned} \]

显然有:

\[\frac{w_x}{d_x}<\frac{w_x+w_y}{d_x+d_y}<\frac{w_y}{d_y} \]

那么可以得出结论:选一个点一定比选两个点更优。

从根跑一遍dfs即可。

posted @ 2020-11-05 21:56  GoPoux  阅读(254)  评论(4编辑  收藏  举报