WA on #39求调
查看原帖
WA on #39求调
1298046
not_alone楼主2024/4/2 20:05

双倍经验过了。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=1510;
int n,m,k,mp[mxn][mxn],a[mxn][mxn],b[mxn][mxn],c[mxn][mxn],d[mxn][mxn];
signed main(){
	ios::sync_with_stdio(0);
	cin>>n>>k;
	m=n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			cin>>mp[i][j];
			mp[i][j]+=mp[i-1][j]+mp[i][j-1]-mp[i-1][j-1];
		}
	for(int i=n;i>=k;i--)
		for(int j=m;j>=k;j--)
			mp[i][j]-=mp[i-k][j]+mp[i][j-k]-mp[i-k][j-k];
	for(int i=k;i<=n;i++)
		for(int j=k;j<=m;j++)
			a[i][j]=max(mp[i][j],max(a[i-1][j],a[i][j-1]));
	for(int i=k;i<=n;i++)
		for(int j=m;j>=k;j--)
			b[i][j]=max(mp[i][j],max(b[i-1][j],b[i][j+1]));
	for(int i=n;i>=k;i--)
		for(int j=k;j<=m;j++)
			c[i][j]=max(mp[i][j],max(c[i+1][j],c[i][j-1]));
	for(int i=n;i>=k;i--)
		for(int j=m;j>=k;j--)
			d[i][j]=max(mp[i][j],max(d[i+1][j],d[i][j+1]));
	int ans=0;
	for(int i=k;i<=n-k;i++)
		for(int j=k;j<=m-k;j++){
			ans=max(ans,a[i][j]+b[i][j+k]+c[i+k][m]);
			ans=max(ans,a[i][m]+c[i+k][k]+d[i+k][j+k]);
			ans=max(ans,a[i][j]+b[n][j+k]+c[i+k][j]);
			ans=max(ans,a[n][j]+b[i][j+k]+d[i+k][j+k]);
		}
	for(int i=k;i<=n-k;i++)
		for(int j=k+k;j<=m-k;j++)
			ans=max(ans,a[n][j-k]+b[n][j+k]+mp[i][j]);
	for(int i=k+k;i<=n-k;i++)
		for(int j=k;j<=m-k;j++)
			ans=max(ans,a[i-k][m]+c[i+k][m]+mp[i][j]);
	cout<<ans;
	return 0;
}
2024/4/2 20:05
加载中...