题目链接
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; }