AcWing 99. 激光炸弹

地图上有n个目标,用整数x,y表示目标在地图上的位置,每个目标都有一个价值Wi.

注意:不同目标可能在同一位置。

现在有一种新型的激光炸弹,可以摧毁一个包含r个位置的正方形内的所有目标。

激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和坐标轴平行。

求一颗炸弹最多能炸掉地图上总价值为多少的目标。

#include<bits/stdc++.h>
using namespace std;
const int N=5050;
int a[N][N],n,x,y,w,r,mx,my,ans;
int main()
{
    cin>>n>>r;
    while(n--)
    {
        cin>>x>>y>>w;x++,y++;
        a[x][y]+=w;
        mx=max(mx,x);
        mx=max(mx,y);
    }
    for(int i=1;i<=mx;i++)
      for(int j=1;j<=mx;j++)
        a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
    if(r>mx){cout<<a[mx][mx];return 0;}
    for(int i=r;i<=mx;i++)
      for(int j=r;j<=mx;j++)
        ans=max(ans,a[i][j]-a[i-r][j]-a[i][j-r]+a[i-r][j-r]);
    cout<<ans<<endl;
    return 0;
}

 

posted @ 2021-01-22 17:11  君与  阅读(78)  评论(0编辑  收藏  举报