今天打得还好吧!起码没有犯很唐的错误乐。
题目
A 维护集合
只打了暴力。
因为数最大只有 \(10^5\) ,所以可以提前预处理出所有的答案。枚举约束 \(i\) 再枚举其作为 \(w\) 重约数的约数 \(i^w\) ,然后枚举其倍数 \(j\) ,那么 \(i\) 就可以作为 \(j\) 的 \(w\) 重约数。把每个数的所有 \(x\) 重约数保存起来,按几重从大到小排序,查询时找到最靠前的集合中存在的约数,答案即为其重数 \(k\) 。
B 星星点灯
灯与灯之间可以相互引燃,可以想到最小生成树。
但如果有灯通过其他灯引燃的代价还不如它自己直接花 \(m\) 的代价点燃,那会产生不止一个的起始点,需要建好几棵树。所以将边权与 \(m\) 取一个最小值,就可以将所有灯连接起来了。答案就是最小生成树边权之和再加上 \(m\) ,因为还有一个起点需要先点燃。
C 发工资
将 \(n\) 个大臣视作 \(n\) 个任务,其奖金上下限就是任务出现的时间和截至时间。那么 \(m\) 个金条就是 \(m\) 个完成任务的机会,金条的价值就是可以完成一个任务的时间。
那么贪心策略很明显了,将任务按照右端点排序,优先完成截至时间早的任务,二分找到最早的可以完成它的机会,匹配不到就说明这个任务要放弃。我记得初赛好像选择有考这个。
D 翘课
经典把 DP 当成贪心做。
发现每一天一定是翘最早和最晚的课才有意义,中间的课即使不上也要留在学校。那么可以保存每一天的课程,对每一天枚举要上的最早的课和最晚的课,就可以暴力计算出 \(c_{i,j}\) 表示第 \(i\) 天翘 \(j\) 节课最少要在学校留多长时间。设一天一共有 \(t\) 节课,那么 \(c_{i,t}=0\) .因为把一天的课都翘了,可以直接不去学校。
有了 \(c\) 数组之后就可以进行分组 DP 了。\(n\) 天就是 \(n\) 个组,每天能选择翘课的数量也只能选择一种方案。最后答案就是从 \(0\) 到 \(k\) 枚举一共要翘几次课,取 \(dp_{n,i}\) 的最小值。
其实 A 也不难,我应该再多看一看的,当时写完暴力就不管了。
今天感觉困困的,困得难受,难受得睡不着。我服了。