题目链接
https://ac.nowcoder.com/acm/problem/20032
解题思路
有坑点啊:
1.xiyi能取到0;
2.遍历前缀和的范围最小为正方形边长,要不当最大的xi,yi都小于r的时候输出为0。
AC代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=5005;
int x,y,n,r,b,xx,yy;
short ans,mp[N][N],v;
short Max(short a,short b)
{
return a>b?a:b;
}
int main()
{
cin>>n>>r;
xx=r,yy=r;//勿忘
for(int i=1;i<=n;i++) cin>>x>>y>>v,mp[x+1][y+1]=v,xx=max(x+1,xx),yy=max(y+1,yy);//勿忘+1
for(int i=1;i<=xx;i++)
for(int j=1;j<=yy;j++)
{
mp[i][j]+=mp[i-1][j]+mp[i][j-1]-mp[i-1][j-1];
if(i>=r && j>=r) ans=Max(ans,mp[i][j]-mp[i-r][j]-mp[i][j-r]+mp[i-r][j-r]);
}
cout<<ans<<endl;
}

京公网安备 11010502036488号