前缀和40分求助
查看原帖
前缀和40分求助
210719
Violet___Evergarden楼主2021/8/9 11:54

rt

#include<iostream>
#define RE register
using namespace std;
int n,k,ans=-1;
int mp[401][401];
int qzh[401][401];//第i行前j个数的和
void Count(int x,int y,int k)
{
  int mini=max(1,x-k),maxi=min(n,x+k),num=0,ge=0;
  for(RE int i=mini;i<=x;i++,ge++)
  {
    int minj=max(1,y-ge),maxj=min(n,y+ge);
    //cout<<i<<" "<<minj<<" "<<maxj<<"\n";
    num+=qzh[i][maxj]-qzh[i][minj-1];
  }
  ge-=2;
  for(RE int i=x+1;i<=maxi;i++,ge--)
  {
    int minj=max(1,y-ge),maxj=min(n,y+ge);
    //cout<<i<<" "<<minj<<" "<<maxj<<"\n";
    num+=qzh[i][maxj]-qzh[i][minj-1];
  }
  //cout<<x<<" "<<y<<" "<<num<<"\n";
  ans=max(ans,num);
}
signed main()
{
//freopen("lazy.in","r",stdin);
//freopen("lazy.out","w",stdout);
scanf("%d%d",&n,&k);
for(RE int i=1;i<=n;i++)
{
  for(RE int j=1;j<=n;j++)
  {
    scanf("%d",&mp[i][j]);
    qzh[i][j]=qzh[i][j-1]+mp[i][j];
  }
}
for(RE int i=1;i<=n;i++)
{
  for(RE int j=1;j<=n;j++)
  {
    Count(i,j,k);
  }
}
cout<<ans<<"\n";
return 0;
//fclose(stdin);
//fclose(stdout);
}
2021/8/9 11:54
加载中...