求 N*N矩阵 元素和最大的连续子矩阵
我们知道一维的问题的解法:
dp[i] = max( a[i], dp[i-1] + a[i] );
而二维呢,就是转化成一维的问题:
详见代码
#include <iostream>
using namespace std;
int a[101][101], b[101];
int n;
int MaxSubArray()
{
int max = 0;
int sub = 0;
for(int i = 0; i < n; i++){
if(sub > 0) sub += b[i];
else sub = b[i];
if(sub > max) max = sub;
}
return max;
}
int MaxSubMatrix()
{
int sum, max = 0;
for(int i = 0; i < n; i++){
for(int k = 0; k < n; k++)
b[k] = 0;
for(int j = i; j < n; j++){
for(int l = 0; l < n; l++)
b[l] += a[j][l];
sum = MaxSubArray();
if(sum > max)
max = sum;
}
}
return max;
}
int main()
{
cin >> n;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin >> a[i][j];
cout << MaxSubMatrix() << endl;
return 0;
}