poj1050:求最大子矩阵和 (n<=100)

首先,先考虑最大连续子序列和这个问题,很容易用O(n)的算法解决;

而一个子矩阵和,就相当于m个同长度连续子序列的和;

则可以把问题转化为:将i~j行的矩阵每列求和,合并成一个序列;这i~j行宽为(j-i+1)的最大子矩阵和,就是对这个序列求最大连续子序列和。所以,用数组s[i,j]表示前i行第j列的和,则从f~r行的矩阵可化为序列p:p[k]=s[f,k]-s[r,k];则整个矩阵的最大子矩阵和就是所有可能的序列p中一个最大连续子序列和。

穷举所有的f,r,时间复杂度为O(n^2),求最大连续子序列和的时间复杂度为O(n),所以总的时间复杂度为O(n^3);

实现起来比较容易,就不贴代码了;





posted on 2013-11-30 13:58  acphile  阅读(88)  评论(0编辑  收藏  举报