//已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。
#include<iostream>
using namespace std;
int a[101][101];
int main(){
int n,ans,max=-1000000000;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;++j){
cin>>a[i][j];
a[i][j]+=a[i][j-1];
}
}
for(int i=0;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
ans=0;
for(int k=1;k<=n;k++){
ans+=a[k][j]-a[k][i];
if(ans>max) max=ans;
if(ans<0) ans=0;
}
}
}
cout<<max<<endl;
return 0;
}
这个问题很简单,其实我们通过枚举法,再加上一点贪心就可以了,但要注意ans<0的时候