每日一题——[HNOI2003]激光炸弹
题目
题解
读完题可以发现这几乎就是一个裸的前缀和板子,然后把所有的正方形r遍历一遍找出最大价值。那么开敲,如果不会前缀和差分知识可以单独拿出来学习一下。
参考代码
#include<iostream>
using namespace std;
const int N = 5010;
int n, m, r;
int g[N][N];
int main(){
cin >> n >> r;
for(int i = 1; i <= n; i ++){
int x, y, w;
cin >> x >> y >> w;
g[x + 1][y + 1] = w;
}
for(int i = 1; i < N; i ++){
for(int j = 1; j < N; j ++){
g[i][j] += g[i - 1][j] + g[i][j - 1] - g[i - 1][j - 1];
}
}
int res = 0;
for(int i = r; i < N ; i ++){
for(int j = r; j < N; j ++){
res = max(res, g[i][j] - g[i - r][j] - g[i][j - r] + g[i - r][j - r]);
}
}
cout << res << endl;
return 0;
}

浙公网安备 33010602011771号