好哥哥们好姐姐们,WA了两个...求调<^~^>
查看原帖
好哥哥们好姐姐们,WA了两个...求调<^~^>
739226
yxans楼主2024/4/2 20:32

rt<^~^>

#include<bits/stdc++.h>
using namespace std;

#define int  long long
const int zyc = 4000 ;

int n,m,k,a[zyc][zyc],f[9][zyc][zyc],b[zyc][zyc],maxv=-520;

inline int read(){
	int x;
	cin>>x; 
	return x;
}

inline int Get_Zyc(int x,int y,int xx,int yy){
	return b[xx][yy]+b[x-1][y-1]-b[x-1][yy]-b[xx][y-1];
}

signed main(){
	n=read();k=read();
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			a[i][j]=read(),b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+a[i][j];
	for(int i=k;i<=n;i++)
		for(int j=k;j<=n;j++)
			f[1][i][j]=max(max(f[1][i][j-1],f[1][i-1][j]),Get_Zyc(i-k+1,j-k+1,i,j));
	for(int i=k;i<=n;i++)
		for(int j=n-k+1;j;j--)
			f[3][i][j]=max(max(f[3][i][j+1],f[3][i-1][j]),Get_Zyc(i-k+1,j,i,j+k-1));
	for(int i=n-k+1;i;i--)
		for(int j=1;j<=n;j++)
			f[2][i][j]=max(max(f[2][i][j-1],f[2][i+1][j]),Get_Zyc(i,j-k+1,i+k-1,j));
	for(int i=n-k+1;i;i--)
		for(int j=n-k+1;j;j--)
			f[4][i][j]=max(max(f[4][i][j+1],f[4][i+1][j]),Get_Zyc(i,j,i+k-1,j+k-1));
	for(int i=1;i<=n-k+1;i++)
		for(int j=1;j<=n-k+1;j++)
			f[5][i][i+k-1]=max(f[5][i][i+k-1],Get_Zyc(i,j,i+k-1,j+k-1));
	for(int len=k+1;len<=n;len++)
		for(int i=1,j=i+len-1;j<=n;j++,i++)
			f[5][i][j]=max(f[5][i+1][j],f[5][i][j-1]);
	for(int i=1;i<=n-k+1;i++)
		for(int j=1;j<=n-k+1;j++)
			f[6][i][i+k-1]=max(f[6][i][i+k-1],Get_Zyc(j,i,j+k-1,i+k-1));
	for(int len=k+1;len<=n;len++)
		for(int i=1,j=i+len-1;j<=n;j++,i++)
			f[6][i][j]=max(f[6][i+1][j],f[6][i][j-1]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			maxv=max(maxv,max(max(f[5][i+1][n]+f[1][i][j]+f[3][i][j+1],f[5][1][i]+f[2][i+1][j]+f[4][i+1][j+1]),max(f[6][j+1][n]+f[1][i][j]+f[2][i+1][j],f[6][1][j]+f[3][i][j+1]+f[4][i+1][j+1])));
	for(int i=1;i<=n;i++)
		for(int j=i+1;j<=n;j++)
			maxv=max(maxv,f[5][1][i]+f[5][i+1][j]+f[5][j+1][n]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			maxv=max(maxv,f[6][1][i]+f[6][i+1][j]+f[6][j+1][n]);
	cout<<maxv;
}
2024/4/2 20:32
加载中...