OrzCC杯模拟赛NOIp模拟赛Day1题解
A. 队爷的新书
题意:给出 $n$ 个区间,可以选择一个数 $p$,对于每个区间,如果 $p$ 在区间内则获得 $p$ 的收益,问总收益的最大值。
思路:很显然是一个思博贪心(甚至做过原题),首先很容易看出的一点就是只有区间的端点对于答案是有意义的,所以把端点弄出来离散化一下,然后看每个点左边有几个左端点几个右端点然后暴力乘一下就行了。
注意:思博题,随便打都能 $\text{A}$ 。
代码:
1 |
|
B. 队爷的AU Plan
题意:
给出两个长度为 $n$ 的任务,第 $i$ 个任务难度为 $hard_i$ ,完成的收益为 $s_i$ 。
初始有一个价值 $m$ ,可以一次完成难度不超过 $m$ 的所有任务,只扣除最大的 $hard_i$ 的价值,可获得这些任务的全部收益,问完成所有任务后的总价值最大是多少。
思路:很显然作为 $\text{DP}$ ,我们可以设 $f _ i$ 表示完成到第 $i$ 个任务时的最大价值,很显然有以下转移:
但是这样是 $O(n ^ 2)$ 级别的复杂度,很显然会 $\color {darkblue} {\text {TLE}}$ ,所以我们考虑优化。
整理一下我们会发现一个事实:最优的转移状态 $j$ 一定满足以下式子值最大即可:
然后我们不妨用 $sum _ i$ 表示前 $i$ 个任务的收益之和。
我们假设对于状态 $i$ 可以由 $j$ 和 $k$ 两种状态转移过来,且 $j < k$ ,首先若 $j$ 和 $k$ 不由前面同一个状态转移得到,则很显然 $k$ 的决策层数更大,消耗更多,则 $j$ 优于 $k$ ;若 $j$ 和 $k$ 由前面同一个状态 $l$ 转移得到,则有:
两式相减得
则很显然有
则由 $j$ 转移过来显然比由 $k$ 转移过来更优。由此推广可得对于每一个状态 $i$ ,最小的能转移到 $i$ 的状态一定是最优的,所以找到第一个能转移的状态就 break
掉就行了。
但是这样并不能 $\color {green} {\text{AC}}$ ,所以还有另一个优化:假设状态 $i - 1$ 由状态 $j$ 转移过来,那么 $j$ 之前的状态肯定不能转移到 $i$ ,所以就可以省掉无用的枚举。
注意:似乎也没什么要注意的。
代码:
1 |
|
C. 队爷的讲学计划
题意:给出一张有向带权图,从一号结点出发,每个 $\text{SCC}$ 内的点互相到达时边权为 $1$ ,问经过最大结点数时经过的最小边权是多少。
思路:很显然需要使用 $\text{Tarjan}$ 将 $\text{SCC}$ 缩点,缩点后形成了一个 $\text{DAG}$ ,然后在 $\text{DAG}$ 上跑 $\text{SPFA}$ 就行了。
注意:题目中要求数量最大优先,所以在跑 $\text{SPFA}$ 的时候应该注意这个问题。
代码:
1 |
|
总结
其实是一场还不错的比赛,但是很可惜没有完全发挥出实力来,因为 $\text{Tarjan}$ 忘了导致 $\text{C}$ 题只有 $10$ 分,然后 $\text{B}$ 题的优化也没有想出来,然后就只有 $160pts$ ,被各路神仙吊打。
或许真的快退役了吧……