最大连续子矩阵和

问题
求一个M*N的矩阵的最大子矩阵和。


比如

在如下这个矩阵中:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2 
拥有最大和的子矩阵为:
9 2
-4 1
-1 8
其和为15。

代码

#include <bits/stdc++.h>
using namespace std;

const int maxn=100;

int max_sub_matrix(int x[][maxn], int m, int n){//二维数组传参,后面的大小不能省略 
    // m和n分别代表行和列
    int sum = -1000000;     // 选择一个足够小的数
    int p[maxn];    // 开辟一个用于存放和的一维数组
    int dp[maxn];
    for (int i = 0; i < m; ++i){
        memset(p, 0, sizeof p);
        for (int j = i; j < m; ++j){
            for (int k = 0; k < n; ++k){
                p[k] += x[j][k];   // p[k]为第k列,从第i行到第j行的和
            }
 
            // 以下for循环等价于 sum = max(sum, max_sub_array(p, n))
            dp[0] = p[0];
            for (int k = 1; k < n; ++k){
                dp[k] = max(dp[k - 1] + p[k], p[k]);
                sum = max(sum, dp[k]);
            }
        }
    }
    return sum;
}

int main() 
{
	int m=4,n=4,ans;
	int a[maxn][maxn]={{0,-2,-7,0},{9,2,-6,2},{-4,1,-4,1},{-1,8,0,-2}};
	ans=max_sub_matrix(a,m,n);		
	cout<<ans<<endl;
}


 

猜你喜欢

转载自blog.csdn.net/aaakkk_1996/article/details/81746509
今日推荐