10分,玄关,求调
查看原帖
10分,玄关,求调
705296
miffy_123楼主2024/3/2 10:39
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3F3F3F3F
#define pl putchar('\n')
#define rep(i,l,r) for(int (i)=(l);(i)<=(r);(i)++)
#define per(i,r,l) for(int (i)=(r);(i)>=(l);(i)--)
const int N=1505;
int n,m,k;
int s[N][N];
int a[N][N];
int lu[N][N],ld[N][N],ru[N][N],rd[N][N];
int row[N][N],col[N][N];
int main(){
    cin>>n>>m>>k;
    rep(i,1,n){
    	rep(j,1,m){
    		int x;
    		cin>>x;
    		s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+x;
		}
	}
	rep(i,k,n){
		rep(j,k,m){
			a[i][j]=s[i][j]-s[i-k][j]-s[i][j-k]+s[i-k][j-k];
		}
	}
	rep(i,1,n-k+1){
		rep(j,1,m-k+1){
			lu[i][j]=max(lu[i-1][j],max(lu[i][j-1],a[i][j]));
		}
	}
	per(i,n,k){
		rep(j,k,m){
			ld[i][j]=max(ld[i+1][j],max(ld[i][j-1],a[i+k-1][j]));
		}
	}
	rep(i,1,n-k+1){
		per(j,m,k){
			ru[i][j]=max(ru[i-1][j],max(ru[i][j+1],a[i][j+k-1]));
		}
	}
	per(i,n-k+1,1){
		per(j,m-k+1,1){
			rd[i][j]=max(rd[i+1][j],max(rd[i][j+1],a[i+k-1][i+k-1]));
		}
	}
	rep(i,1,n-k+1){
		rep(j,k,m){
			row[i][i+k-1]=max(row[i][i+k-1],a[i+k-1][j]);
		}
	} 
	rep(l,k+1,n){
		rep(i,1,n-l+1){
			row[i][i+l-1]=max(row[i+1][i+l-1],row[i][i+l-2]);
		}
	}
	rep(j,1,m-k+1){
		rep(i,k,n){
			col[j][j+k-1]=max(col[j][j+k-1],a[i][j+k-1]);
		}
	}
	rep(l,k+1,m){
		rep(i,1,m-l+1){
			col[i][i+l-1]=max(col[i+1][i+l-1],col[i][i+l-2]);
		}
	}
	ll ans=0;
	rep(i,1,n-k){
		rep(j,1,m-k){
			ans=max(ans,(ll)lu[i][j]+ru[i][j+1]+row[i+1][n]);
			ans=max(ans,(ll)ld[i+1][j]+rd[i][j+1]+row[1][i]);
			ans=max(ans,(ll)lu[i][j]+ld[i+1][j]+col[j+1][m]);
			ans=max(ans,(ll)ru[i][j+1]+rd[i+1][j+1]+col[1][j]);
		}
	}
	rep(i,1,n-2*k){
		rep(j,i+k,n-k){
			ans=max(ans,(ll)row[1][i]+row[i+1][j]+row[j+1][n]);
		}
	}
	rep(i,1,m-2*k){
		rep(j,i+k,m-k){
			ans=max(ans,(ll)col[1][i]+col[i+1][j]+col[j+1][m]);
		}
	}
	cout<<ans;
    return 0;
}
2024/3/2 10:39
加载中...