BZOJ1218 [HNOI2003]激光炸弹 二维前缀和
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1218
题意概括
给出一个大的矩阵,求边长为r的正方形区域的最大sum。
题解
二维前缀和然后暴力就可以了。
代码
#include <cstring> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cmath> using namespace std; const int N=5000+5; int sum[N][N]; int n,x,y,v,r; int main(){ memset(sum,0,sizeof sum); scanf("%d%d",&n,&r); for (int i=1;i<=n;i++){ scanf("%d%d%d",&x,&y,&v); sum[x+1][y+1]+=v; } for (int i=1;i<=5001;i++) for (int j=1;j<=5001;j++) sum[i][j]+=sum[i][j-1]; for (int i=1;i<=5001;i++) for (int j=1;j<=5001;j++) sum[i][j]+=sum[i-1][j]; int ans=0; for (int i=r;i<=5000;i++) for (int j=r;j<=5000;j++) ans=max(ans,sum[i][j]-sum[i][j-r]-sum[i-r][j]+sum[i-r][j-r]); printf("%d",ans); return 0; }