最大子矩阵问题,转化成最大子段
#include<iostream>
#include<cmath>
using namespace std;
//最大子段和算法
int MaxArray(int n, int array[]){
int sum=0;
int max=-10000;
for(int i=0;i<n;i++){
if(sum>0)
sum+=array[i];
else
sum=array[i];
if(sum>max)
max=sum;
}
return max;
}
//最大子矩阵
int MaxSub(int n,int array[100][100]){
int max=0;
int col[100];
for(int x=0;x<n;x++){
for(int y=0;y<n;y++){
col[y]=0;
}
for(int j=x;j<n;j++){
for(int k=0;k<n;k++){
col[k]+=array[j][k];
}
int sum=MaxArray(n,col);
if(sum>max)
max=sum;
}
}
return max;
}
int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int N;
cin>>N;
int input[100][100];
int max=0;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
cin>>input[i][j];
// max+=input[i][j];
}
}
max = MaxSub(N,input);
cout<<max;
return 0;
}