题解 打地鼠

传送门

二维前缀和,没了
讲个笑话,离考试结束还有5min我检查代码时发现我忘了我刚写过这么个题了

Code:

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 2010
#define ll long long 
//#define int long long 

inline int read() {
	int ans=0, f=1; char c=getchar();
	while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
	while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
	return ans*f;
}

int n, k;
int mp[N][N], sum[N][N];
char t[N];

namespace force{
	int ans;
	void solve() {
		for (int i=1; i<=n; ++i)
			for (int j=1; j<=n; ++j)
				sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+mp[i][j];
		for (int i=k; i<=n; ++i)
			for (int j=k; j<=n; ++j)
				ans = max(ans, sum[i][j]-sum[i-k][j]-sum[i][j-k]+sum[i-k][j-k]);
		printf("%d\n", ans);
		exit(0);
	}
}

signed main()
{
	n=read(); k=read();
	for (int i=1; i<=n; ++i) {
		scanf("%s", t+1);
		for (int j=1; j<=n; ++j)
			mp[i][j]=t[j]-'0';
	}
	force::solve();
	
	return 0;
}
posted @ 2021-08-15 06:05  Administrator-09  阅读(19)  评论(0编辑  收藏  举报