【BZOJ 1218】 [HNOI2003]激光炸弹

【链接】 我是链接,点我呀:)
【题意】

在这里输入题意

【题解】

一开始以为可以炸多次。 然后发现是一次。 那么久直接做个前缀和就好了

枚举正方形的左上角。

然后刚好和网格对齐的话。
肯定没有放在(x+0.1,y+0.1)这个地方好。
这样可以把边缘的炸掉。

然后为了方便处理。
x和y都递增1.

【代码】

#include <cstdio>
#include <algorithm>
using namespace std;

const int N = 5e3;

int n,r,a[N+10][N+10];

int main()
{
    scanf("%d%d",&n,&r);
    for (int i = 1;i <= n;i++){
        int x,y,v;
        scanf("%d%d%d",&x,&y,&v);
        x++,y++;
        a[x][y]+=v;
    }

    for (int i = 1;i <= N+1;i++)
        for (int j = 1;j <= N+1;j++)
            a[i][j] += a[i][j-1]+a[i-1][j]-a[i-1][j-1];

    int ans = 0;
    for (int i = r;i <= N+1;i++)
        for (int j = r;j<=N+1;j++)
            ans = max(ans,a[i][j]-a[i][j-r]-a[i-r][j]+a[i-r][j-r]);
    printf("%d\n",ans);


    return 0;
}

posted @ 2018-03-20 08:52  AWCXV  阅读(174)  评论(0编辑  收藏  举报