XOQR @ 2021-11-11 23:07:10
#include<cstdio>
#include<iostream>
#define For(a,b,c,d) for(int d=a;d<=b;d+=c)
using namespace std;
int n,s=-0e7,a[2002][2002],f[2002],b[2002];
int main() {
cin>>n;
For(1,n,1,i) {
For(1,n,1,j) {
scanf("%d",a+i+j);
}
}
For(1,n,1,i) {
For(i,n,1,j) {
For(1,n,1,k) {
b[k]+=a[j][k];
}
For(1,n,1,k) {
f[k]=max(f[i-1]+b[k],b[k]);
s=max(s,f[k]);
}
}
For(1,n,1,k) {
f[k]=0;
}
}
printf("%d",s);
return 0;
}
by Dreamer_002 @ 2022-07-22 11:43:33
其实不必要那么多for,也不必要f和b,只要向这样:
#include<cstdio>
const int N = 125;
const int INF = 1000000000;
int a[N][N];
int maxx=-INF;
int ans;
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&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];
maxx = maxx > ans ? maxx : ans;
ans = ans > 0 ? ans : 0;
}
}
}
printf("%d\n",maxx);
return 0;
}
马上就AC了。