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