#P1387. The Constraint Densest Submatrix
The Constraint Densest Submatrix
P1387. 约束最密集子矩阵
描述
给定一个矩阵,该问题的目标是找到的一个(连续的)子矩阵,其大小至少为行和至少列,使得子矩阵中数字的平均值最大化。
设是一个矩阵。那么一个矩阵是的一个(连续的)子矩阵,当存在一个固定的有序对,使得对于每个对,都有;注意且。例如,
矩阵的密度是中所有元素的平均值,即$密度=\frac{\sum_{i = 1}^{m}\sum_{j = 1}^{n}a_{ij}}{mn}$。注意,找到给定矩阵的最密集子矩阵在一般情况下很简单,就是矩阵中的最大元素。另一方面,当要求找到大小至少为的子矩阵且其密度最大化时,这个问题就变得有趣了。
编写一个程序来找到的大小至少为的最密集子矩阵。
输入
有若干组整数矩阵。输入是一个整数列表。在每组中,第一行的 4 个整数表示矩阵的大小,和表示一个矩阵,以及约束子矩阵的大小和。注意,、、、中的每一个最大可以是 200。在这四个整数之后,会有行表示矩阵的行;每行恰好包含个整数,这些整数是该行中的元素。矩阵中每个元素的值在 0 到 800 的范围内,并且大多数元素小于 100。因此,对于特定的矩阵,总共有个整数。
这些矩阵会按照上述模式在输入中重复出现。整数表示输入的结束。
输出
对于输入的每个矩阵,找到大小至少为行和列的最密集子矩阵。通过打印四个索引来指定子矩阵的左上角和右下角来输出子矩阵。例如,一行
表示一个子矩阵,其左上角为,右下角为。输出一个单独的星号*
表示输出的结束。
为了答案的唯一性,如果两个子矩阵具有相同的密度,只输出其四个角的索引字典序较小的矩阵。例如,如果两组索引是和,那么只输出第一个子矩阵,因为其角的索引字典序较小。
输入数据 1
3 4 2 1
150 500 150 800
1 200 100 300
400 800 80 400
4 2 3 2
400 800
200 500
100 200
600 600
0
输出数据 1
1 4 2 4
1 1 4 2
*
提示
暴力算法会导致时间限制超出。
来源
台湾 2001