FoxAndFlowerShopDivOne

作者:王子健 徐明宽

关键词:枚举,动态规划,RMQ

题目简述

给定一块的田地,每块田地上只可能是百合花、牵牛花、空地这三种可能之一。

你的任务是找到两块非空的且无交集(不同时覆盖同一块土地)的矩形区域,满足这两块区域内百合花的数量与牵牛花的数量之差的绝对值不超过,且使得区域内花的数量之和最大。

分析

我们把""看成,""看成,""看成,那么问题便等价为选出两块矩形区域满足区域内元素和在之间且使得区域内包含的非元素尽量多。

其次我们可以发现,两块矩形的排列方式无外乎两种情况:

存在一条竖线将两块矩形区域隔开且不穿过两块矩形区域内部。

存在一条横线将两块矩形区域隔开且不穿过两块矩形区域内部。

由于两种情况是等价的,我们不妨只考虑第一种情况。

算法一

考虑使用动态规划算法来解决这道问题,设表示前列选出一个元素和为的矩形最多包含的非元素的数量,设表示后列选出一个元素和为的矩形最多包含的非元素的数量。

的求法:从小到大枚举,那么最优矩形既可能是所表示的矩形,也可能是右边界为的矩形。由于的范围很小,我们不妨枚举所有第二种矩形来计算即可。的求法同理。

得到数组后,我们枚举所有符合题意的分割线、左边矩形的元素和与右边矩形的元素和,用更新答案即可。

时间复杂度为

算法二

同样使用动态规划算法计算出(前列选出一个元素和为的矩形最多包含的非元素的数量),然后可以枚举右边的矩形(不妨设右边矩形的最左边一列为)得到元素和,则可更新答案的满足,这是一个RMQ(询问区间最大值)问题,可以用的时间预处理后每次询问。因为,所以总时间复杂度为

results matching ""

    No results matching ""