此代码 A 了其双倍经验。
#include<stdio.h>
#include<bits/stdc++.h>
#define MOD 998244353
#define esp 1e-8
#define INF 99999999999999
#define LL long long
#define rep(i,a,b,g) for(LL i=a;i<=b;i+=g)
#define rem(i,a,b,g) for(LL i=a;i>=b;i-=g)
#define repn(i,a,b,g) for(LL i=a;i<b;i+=g)
#define remn(i,a,b,g) for(LL i=a;i>b;i-=g)
#define pll pair<LL,LL>
#define mkp(x,y) make_pair(x,y)
#define i128 __int128
#define lowbit(x) ((x)&(-(x)))
#define lc (u<<1)
#define rc (u<<1|1)
using namespace std;
LL n,m,k;
LL s[1510][1510],K[1510][1510],ne[1510][1510],se[1510][1510],sw[1510][1510],nw[1510][1510],hang[1510][1510],lie[1510][1510];
LL mc=-INF;
int main()
{
cin>>n>>k;
m=n;
rep(i,1,n,1)
{
rep(j,1,m,1)
{
LL x;
cin>>x;
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+x;
}
}
rep(i,k,n,1)
{
rep(j,k,m,1)
{
K[i][j]=s[i][j]-s[i-k][j]-s[i][j-k]+s[i-k][j-k];
}
}
rep(i,k,n,1)
{
rep(j,k,m,1)
{
nw[i][j]=max(nw[i-1][j],max(nw[i][j-1],K[i][j]));
}
}
rem(i,n-k+1,1,1)
{
rep(j,k,m,1)
{
sw[i][j]=max(sw[i+1][j],max(sw[i][j-1],K[i+k-1][j]));
}
}
rem(i,n-k+1,1,1)
{
rem(j,m-k+1,1,1)
{
se[i][j]=max(se[i+1][j],max(se[i][j+1],K[i+k-1][j+k-1]));
}
}
rep(i,k,n,1)
{
rem(j,m-k+1,1,1)
{
ne[i][j]=max(ne[i-1][j],max(ne[i][j+1],K[i][j+k-1]));
}
}
rep(i,1,n-k+1,1)
{
rep(j,k,m,1)
{
hang[i][i+k-1]=max(hang[i][i+k-1],K[i+k-1][j]);
}
}
rep(t,k+1,n,1)
{
rep(i,1,n-t+1,1)
{
hang[i][i+t-1]=max(hang[i+1][i+t-1],hang[i][i+t-2]);
}
}
rep(j,1,m-k+1,1)
{
rep(i,k,n,1)
{
lie[j][j+k-1]=max(lie[j][j+k-1],K[i][j+k-1]);
}
}
rep(t,k+1,m,1)
{
rep(j,1,m-t+1,1)
{
lie[j][j+t-1]=max(lie[j+1][j+t-1],lie[j][j+t-2]);
}
}
rep(a,k,n-k,1)
{
rep(b,k,m-k,1)
{
mc=max(mc,lie[1][b]+ne[a][b+1]+se[a+1][b+1]);
mc=max(mc,lie[b+1][m]+nw[a][b]+sw[a+1][b]);
mc=max(mc,hang[a+1][n]+nw[a][b]+ne[a][b+1]);
mc=max(mc,hang[1][a]+sw[a+1][b]+se[a][b+1]);
}
}
rep(a,k,n-2*k,1)
{
rep(b,a+k,n-k,1)
{
mc=max(mc,hang[1][a]+hang[a+1][b]+hang[b+1][n]);
}
}
rep(a,k,m-2*k,1)
{
rep(b,a+k,m-k,1)
{
mc=max(mc,lie[1][a]+lie[a+1][b]+lie[b+1][n]);
}
}
cout<<mc<<endl;
return 0;
}
WA on 00_sample_00.txt,01_random_31.txt,01_random_30.txt