BZOJ 1218 激光炸弹

Posted on 2016-11-02 20:34  ziliuziliu  阅读(143)  评论(0编辑  收藏  举报

暴力。

但是WA了一发。

凭什么for到5001就过了啊。。。。

难道点权有负?

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 5050
using namespace std;
int n,r,mx=0,my=0,x,y,z,sum[maxn][maxn],ans=0;
int main()
{
    scanf("%d%d",&n,&r);
    for (int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&x,&y,&z);x++;y++;
        mx=max(mx,x);my=max(my,y);
        sum[x][y]+=z;
    }    
    mx=5001;my=5001; 
    for (int i=1;i<=mx;i++)
        for (int j=1;j<=my;j++)
            sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
    for (int i=1;i<=mx-r+1;i++)
        for (int j=1;j<=my-r+1;j++)
            ans=max(ans,sum[i+r-1][j+r-1]-sum[i-1][j+r-1]-sum[i+r-1][j-1]+sum[i-1][j-1]);
    printf("%d\n",ans);
    return 0;
}