1006模拟题解

1006国庆模拟题解

T1

emm……

首先思考一下题目的要求。

最简单最容易想到的,应该是(DFS)

然鹅……

今天代码实现的时候出了大问题……

进去出不来了……

淦!

于是只能骗分,也是能想到的最简单的骗分方式。

对于每一个(k==n-1)而言,

显然我们只能够选择保留一座山峰。

而无论保留哪座山峰,

我们都不会积水。

也就是说,积水体积为0。

这意味着我们只需要固输(n)即可。

50个点,过了2个。

简直是非常绝妙的 得分 骗分手段!!!

正解:

考虑(DP)

(f[i][j][p][0/1])表示前(i)列,最大值是(j),且要求在后面存一个高度至少为(j)的土地。

已经铲平了(p)块。

当前积水体积为奇数/偶数的方案数。

由于至多会去掉(K)块土地,

所以对于任意一个(i),(j)的值只有(K+1)种。

前缀、后缀(DP)都做出,

枚举最终最大值所在列合并答案,

注意处理多个最大值的情况。

时间复杂度(P(NK^2))

T2

按照中序遍历和先序遍历贪心均可。

每一次检查当前点是否可以加入最终的树中,从当前点向上,每次遇到自己的左子树时,根据目前的情况计算右子树至少需要留下多少的点。

计算得到一个点留下整棵树至少多大,如果不超过(K),则显然可以。

由于读入的树时(AVL)树,树高为(log N)

时间复杂度(O(NlogN))

T3

我有思路的另外一道题。

直接暴力模拟,可以拿到(40)分。

显然,最终的挖掘方案一定可以按照深度从小到大的顺序操作。

那么在操作深度为(D)时,

小于(D)的所有深度相应区间的土地一定都消失了。

由于一次操作只可能影响同一个深度的土地,

所以我们可以将每一行看成一个独立的问题,

累加答案。

剩下的问题就是如何处理一行。

一个显然的贪心是区间中最靠前的一块土地肯定要被覆盖,

最优的方式就是将其作为长度为(K)的区间的第一个。

我们预处理出每个位置开始的倍增数组

时间复杂度(O(H(W+Q)logW))

T4

看不懂

原文地址:https://www.cnblogs.com/JingFenHuanZhe/p/MoNI1006.html