Acwing-99-激光炸弹(二维前缀和)
Posted ydddd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing-99-激光炸弹(二维前缀和)相关的知识,希望对你有一定的参考价值。
链接:
https://www.acwing.com/problem/content/101/
题意:
一种新型的激光炸弹,可以摧毁一个边长为 R 的正方形内的所有的目标。
现在地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。
激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个边长为 R 的正方形的边必须和x,y轴平行。
若目标位于爆破正方形的边上,该目标不会被摧毁。
求一颗炸弹最多能炸掉地图上总价值为多少的目标。
思路:
二维前缀和搞一下,然后暴力即可.
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 5e3+10;
int Sum[MAXN][MAXN];
int n, r;
int main()
scanf("%d%d", &n, &r);
int x, y, v;
int maxx = r, maxy = r;
for (int i = 1;i <= n;i++)
scanf("%d%d%d", &x, &y, &v);
x++, y++;
Sum[x][y] = v;
maxx = max(maxx, x);
maxy = max(maxy, y);
for (int i = 1;i <= maxx;i++)
for (int j = 1;j <= maxy;j++)
Sum[i][j] = Sum[i-1][j]+Sum[i][j-1]-Sum[i-1][j-1]+Sum[i][j];
int res = 0;
for (int i = r;i <= maxx;i++)
for (int j = r;j <= maxy;j++)
res = max(res, Sum[i][j]-Sum[i][j-r]-Sum[i-r][j]+Sum[i-r][j-r]);
printf("%lld\n", res);
return 0;
以上是关于Acwing-99-激光炸弹(二维前缀和)的主要内容,如果未能解决你的问题,请参考以下文章