基础算法-前缀和与差分-激光炸弹

基础算法-前缀和与差分-激光炸弹

  • 题目描述
  • 思路分析
  • 代码实现

题目描述

点这里

思路分析

二位前缀和裸题。
预处理出边界,读入,前缀和数组。
枚举右下角坐标,算区域内总价值,更新答案即可。

代码实现

#include
using namespace std;
using ll=long long;
const int N = 5050;
int n,r,ans;
int s[N][N];
int main(){
    cin>>n>>r;
    r=min(r,5001);
    int n1=5001,m1=5001;
    while(n--){
        int x,y,w;
        cin>>x>>y>>w;
        x++;
        y++;
        s[x][y]+=w;
    }
    //求前缀和数组s[N][N];
    for(int i=1;i<=n1;i++){
        for(int j=1;j<=m1;j++){
            s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
        }
    }
    //遍历
    int res=0;
    for(int i=r;i<=n1;i++){
        for(int j=r;j<=m1;j++){
            res=max(res,s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r]);
        }
    }
    cout<<res;
    return 0;
}

你可能感兴趣的:(算法,算法,数据结构)