WA on #39 求调
查看原帖
WA on #39 求调
681036
OldDriverTree楼主2024/3/31 17:55

rt

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1002;
int n,m; ll ans,s[N][N],a[N][N],b[N][N],c[N][N],d[N][N];
ll sum(int x,int y) { return s[x][y]-s[x-m][y]-s[x][y-m]+s[x-m][y-m]; }

int read() {
	int x=0; char c=0; while (!isdigit(c) ) c=getchar();
	while (isdigit(c) ) x=(x<<3)+(x<<1)+(c&15),c=getchar();
	return x;
}
int main()
{
	n=read(),m=read();
	for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+read();
	for (int i=m;i<=n;i++) for (int j=m;j<=n;j++) a[i][j]=max({a[i][j-1],a[i-1][j],sum(i,j)});
	for (int i=m;i<=n;i++) for (int j=n;j>=m;j--) b[i][j]=max({b[i][j+1],b[i-1][j],sum(i,j)});
	for (int i=n;i>=m;i--) for (int j=m;j<=n;j++) c[i][j]=max({c[i][j-1],c[i+1][j],sum(i,j)});
	for (int i=n;i>=m;i--) for (int j=n;j>=m;j--) d[i][j]=max({d[i][j+1],d[i+1][j],sum(i,j)});
	for (int i=m+m;i<=n-m;i++) for (int j=m;j<=n;j++) ans=max(ans,sum(i,j)+a[i-m][n]+b[i+m][n]);
	for (int i=m+m;i<=n;i++) for (int j=m;j<=n-m;j++) ans=max(ans,sum(i,j)+a[i-m][n]+d[i][j+m]);
	for (int i=m;i<=n-m;i++) for (int j=m;j<=n-m;j++) ans=max(ans,sum(i,j)+c[i+m][n]+b[i][j+m]);
	for (int i=m;i<=n;i++) for (int j=m+m;j<=n-m;j++) ans=max(ans,sum(i,j)+a[n][j-m]+b[n][j+m]);
	for (int i=m;i<=n-m;i++) for (int j=m;j<=n-m;j++) ans=max(ans,sum(i,j)+c[i+m][j]+b[n][j+m]);
	for (int i=m;i<=n-m;i++) for (int j=m+m;j<=n;j++) ans=max(ans,sum(i,j)+a[n][j-m]+d[i+m][j]);
	return !printf("%lld",ans);
}
2024/3/31 17:55
加载中...