首先,是子矩阵,不一定一(1,1)开头
by yh2022mayu @ 2024-03-17 19:06:18
所以要四重枚举
by yh2022mayu @ 2024-03-17 19:10:37
@[yh2022mayu](/user/541786)
```cpp
#include<bits/stdc++.h>
using namespace std;
int sa[200][200],n,a,maxn;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&a);
sa[i][j]=sa[i-1][j]+sa[i][j-1]-sa[i-1][j-1]+a;
}
cout<<endl;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=0;k<=i;k++){
for(int q=0;q<=j;q++){
if(i==1&&j==1&&k==0&&q==0)
maxn=sa[i][j]-sa[k][q];
if(sa[i][j]-sa[k][q]>maxn)
maxn=sa[i][j]-sa[k][q];
}
}
}
}
cout<<maxn;
return 0;
}
```
by lucy2012 @ 2024-03-17 19:33:12
对的
by yh2022mayu @ 2024-03-17 19:35:31
(所以为什么11行要换行
by yh2022mayu @ 2024-03-17 19:36:01
```
#include<bits/stdc++.h>
using namespace std;
int sa[200][200],n,a,maxn;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&a);
sa[i][j]=sa[i-1][j]+sa[i][j-1]-sa[i-1][j-1]+a;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=0;k<i;k++){
for(int q=0;q<j;q++){
if(i==1&&j==1&&k==0&&q==0)
maxn=sa[i][j]+sa[k][q]-sa[i][q]-sa[k][j];
if(sa[i][j]+sa[k][q]-sa[i][q]-sa[k][j]>maxn)
maxn=sa[i][j]+sa[k][q]-sa[i][q]-sa[k][j];
}
}
}
}
cout<<maxn;
return 0;
}
```
by yh2022mayu @ 2024-03-17 19:46:35
@[lucy2012](/user/1252442)
by yh2022mayu @ 2024-03-17 19:54:51
@[lucy2012](/user/1252442) 你在11行为什么要换行,这不也是我前面说的调试代码么?
by lutaoquan2012 @ 2024-03-17 20:24:52
@[yh2022mayu](/user/541786) @[lutaoquan2012](/user/952033) 。。。谢了
by lucy2012 @ 2024-03-18 18:00:40