牛客竞赛 1012 激光炸弹

题意

给定一个二维矩阵 , 每个点都有权值 , 求某个\(r\times r\)的方形能覆盖最多权值

本题为二维前缀和的模板题

代码

#include<bits/stdc++.h>
using namespace std;

inline int read() {
    int ans = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')f = -1;
        ch = getchar();
    }
    while (ch <= '9' && ch >= '0') {
        ans = ans * 10 + ch - '0';
        ch = getchar();
    }
    return ans * f;
}
int g[5010][5010];
int main() {
    int n= read(), r=read();
    for (int i = 1; i<= n; i++) {
        int x=read(),y=read(),v=read();
        g[++x][++y] += v;
    }
    for (int i = 1; i<= 5005; i++) {
        for (int j = 1; j<= 5005; j++) {
            g[i][j] = g[i-1][j] + g[i][j-1] + g[i][j] - g[i-1][j-1];
        }
    }
    int ans = 0;
    for (int i = r; i<= 5005;i++) {
        for (int j = r; j<=5005; j++) {
            ans = max(ans,g[i][j] + g[i-r][j-r] -g[i-r][j]-g[i][j-r]);
        }
    }
    cout<<ans;

    return 0;
}
posted @ 2025-06-18 23:55  Guaninf  阅读(22)  评论(0)    收藏  举报