使用部分和找到子矩阵的最大和

时间:2018-07-15 11:20:49

标签: sum submatrix

我正在尝试解决一个问题,其中我有一个给定的矩阵,我需要找到子矩阵的最大和。 示例:

Input:
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1 
-1 -1 -1 -1
Output:
-1

Input:
-1 -1 -1 -1
-1 2 2 -1
-1 -1 -1 -1 
-1 -1 -1 -1

Output:
4

我试图使用一个公式来保存矩阵的部分和,但是我的问题是,如果矩阵中的值为负,那么它就不能很好地工作,例如如果我的值为-1,不想对它们进行总结。

到目前为止,这是我的代码:

#include<iostream>
using namespace std;

int main(){

    int n,m, mt[300][300], S[300][300];

    cin>>n>>m;

    for (int i = 1; i <= n; ++i){
        for (int j = 1; j <= m; ++j){
            cin>>mt[i][j];
        }
    }

    for(int i = 1 ; i <= n ; i ++){
        for(int j = 1 ; j <= m ; j ++){
            if(mt[i][j]<0){
                S[i][j] = 0;
            }
            if(mt[i][j] > 0){
                S[i][j] = S[i-1][j] + S[i][j-1] - S[i-1][j-1] + mt[i][j];
            }
        }
    }

    int minValue = S[1][1];
    int maxValue = 0;

      for(int i = 1 ; i <= n ; i++)
        for(int j = 1; j <= m; j++){
            if(S[i][j] > minValue){
                maxValue = S[i][j];
            }
        }

        cout<<maxValue;
    }

我试图做的是,如果我有负值,我将其更改为0,但是问题是,如果矩阵上只有负值,则maxValue应该是那个负值,而不是0。

0 个答案:

没有答案