其实zzq学长每天向zqr学姐请教算法问题是为了难住她,让她尴尬,上次的问题被ac后,zzq学长有点不甘心,今天又来“请教”zqr学姐,zzq学长拿出了一个N*N的矩阵,他希望zqr学姐能够在这个矩阵中找到一个子矩阵使子矩阵的和最大,这次zqr学姐真的被难到了,为了不让空气突然变的尴尬,你能帮帮zqr学姐吗?
例如:
-6 1 1
1 1 1
1 1 1
最大的子矩阵是第二行和第三行两行形成的子矩阵:
1 1 1
1 1 1
求和后答案为6
#include <iostream>
using namespace std;
const int N=110;
int map[N][N];
int n;
void solve() {
int ans=-0x3f;
for(int i=1; i<=n; i++) {
for(int j=i; j<=n; j++) {
int sum=0;
for(int k=1; k<=n; k++) {
if(sum<0)sum=0;
sum=sum+map[k][j]-map[k][i-1];
ans=max(ans,sum);
}
}
}
cout<<ans;
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
int temp;
cin>>temp;
map[i][j]=map[i][j-1]+temp;
}
}
solve();
}