​前缀和思想求k矩阵​

题解:
根据前缀和的思想找出规律,可以得出以i,j点为顶点的矩阵和

sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+map[i][j]
这个可以求出以i,j为顶点的矩阵和
然后枚举k*k块的正方形即可

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=3005;
char s[maxn];
int Map[maxn][maxn];
int sum[maxn][maxn];
int main()
{
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
for(int i=1; i<=n; i++)
{
scanf("%s",s+1);
for(int j=1; j<=m; j++)
{
Map[i][j]=s[j]-'0';
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
sum[i][j]=(sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+Map[i][j]);
}
}
int ans=0;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
// if(sum[i][j]-sum[i-k][j]-sum[i][j-k]+sum[i-k][j-k])
// ans++;
printf("%d ",sum[i][j]);
}
printf("\n");
}
printf("%d\n",ans);

}