Bu Dengklek 有一个鲶鱼塘。
这个鲶鱼塘是由
池塘里总共有
Bu Dengklek 想造些长堤来抓鲶鱼。
在第
鲶鱼
- 单元
或 中 至少有一个 被某个长堤盖住,而且 - 没有长堤盖住单元
。
例如,考虑尺寸为
- 鲶鱼
在单元 中,重量为 克。 - 鲶鱼
在单元 中,重量为 克。 - 鲶鱼
在单元 中,重量为 克。 - 鲶鱼
在单元 中,重量为 克。
Bu Dengklek 可以这样来造长堤:
造长堤前 | 造长堤后 |
---|---|
![]() |
![]() |
单元中的数字表示该单元中鲶鱼的重量。
阴影单元被长堤盖住。
在该场景中,鲶鱼
Bu Dengklek 希望造出来的长堤能让被抓住的鲶鱼的总重量尽量大。 你的任务是求出 Bu Dengklek 通过造长堤能抓住的鲶鱼的最大总重量。
实现细节
你需要实现下面的函数:
int64 max_weights(int N, int M, int[] X, int[] Y, int[] W)
:池塘的尺寸。 :鲶鱼的数量。 , :长度为 的两个数组,给出鲶鱼的位置。 :长度为 的数组,给出鲶鱼的重量。- 该函数需要返回一个整数,表示 Bu Dengklek 通过造长堤能抓住的鲶鱼的最大总重量。
- 该函数将被恰好调用一次。
例子
考虑如下调用:
max_weights(5, 4, [0, 1, 4, 3], [2, 1, 4, 3], [5, 2, 1, 3])
该例子的解释请见前面的题面。
在造完所述的长堤后,Bu Dengklek 能抓住鲶鱼
约束条件
, (对所有满足 的 ) (对所有满足 的 )- 任意两条鲶鱼都不会在同一单元中。
换句话说,
或 (对于所有满足 的 和 )。
子任务
- (3 分)
是偶数(对于所有满足 的 ) - (6 分)
(对于所有满足 的 ) - (9 分)
(对于所有满足 的 ) - (14 分)
, (对于所有满足 的 ) - (21 分)
- (17 分)
- (14 分) 在每列中至多有
条鲶鱼。 - (16 分) 没有额外限制。
评测程序示例
评测程序示例读取如下格式的输入:
- 第
行: - 第
行( ):
评测程序示例将按照如下格式打印你的答案:
- 第
行:max_weights
的返回值
时间限制:
空间限制: