解题思路
矩形子阵列高 h、宽 w 时,最少行程 d=min(h,w),收益 E=U×d。按 d 由哪一边决定,分两类枚举。
- d=h(要求 w≥h):枚举上下界得到列压缩一维数组,再求长度至少为 h 的连续段最大和 U,用 h⋅U 更新答案。
- d=w(要求 h≥w):枚举左右界得到行压缩一维数组,再求长度至少为 w 的连续段最大和。
- 长度至少为 L 的最大子段和:前缀和 P,维护窗口左端 P[r−L] 及更左的最小值,扫右端即可 O(n)。
复杂度分析
题目内容
机房温感阵列排成 P 行 Q 列。第 r 行第 c 列测点的读数增益为 tr,c。
巡检车单次行程可从任意测点出发,沿同一行或同一列直线驶到另一测点,途经测点均被覆盖。
需选取一块非空连续矩形子阵列。对该子阵列:
- 行数为 h,列数为 w。
- 读数增益总和U=ta,x+ta,x+1+⋯+ta,y+ta+1,x+⋯+tb,y,
其中左上角为 (a,x)、右下角为 (b,y),且 h=b−a+1,w=y−x+1。
- 覆盖全部测点的最少行程次数为d=min(h,w).
按行巡检需 h 次,按列巡检需 w 次,取更小者。
- 巡检收益定义为E=U×d.
求最大巡检收益。
输入描述
第一行两个正整数 P,Q,表示阵列行数与列数。
接下来 P 行,每行 Q 个整数 tr,c,表示各测点读数增益。
输出描述
输出一个整数,表示最大巡检收益。
样例1
输入
2 3
2 -3 4
1 5 -1
输出
16
说明
取左上角 (1,2)、右下角 (2,3)(下标从 1 起):所含读数为 −3,4,5,−1,总和 U=5,行数 h=2,列数 w=2,d=min(2,2)=2,收益 E=10。
取仅含第二行前两格 1,5:总和 U=6,行数 h=1,列数 w=2,d=1,收益 6。
取整块阵列:总和 U=8,h=2,w=3,d=2,收益 E=16,即为最优。
数据范围
- 1≤P,Q≤4×102
- −103≤tr,c≤103
- 所有输入均为整数