【蓝桥杯题解】激光炸弹 (二维前缀和)
激光炸弹
思路与题目解读
这个题坑巨多,那个R的范围远大于区间的范围,所以R最多只能取到5001,否则就会数组越界SF,思路就是二维的前缀和.
C++代码
题解好多代码 和y总的代码现在都用不了,这是最新的
#include <iostream>
using namespace std;
const int N = 5010;
int s[N][N];//c++ 大数组开全局
int main () {
int N,R;// C++重名优先使用局部变量
cin >> N >> R;
R = min (R, 5001);
int n = R,m = R;
for (int i = 0,x,y,w; i < N; i ++) {
cin >> x >> y >> w;
s[x+1][y+1] += w;
//映射到1 ,为了满足题意不考虑边界
n = max(n, x+1),m= max(m, y+1);//更新最大边界
}
for(int i = 1;i <= n;i ++) {
for(int j = 1;j <= m; j ++) {
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + s[i][j];
}
}
int ans = 0;
for (int i = R; i <= n; i ++) {
for (int j = R; j <= m; j ++) {
ans = max (ans,s[i][j] - s[i - R][j] - s[i][j - R] + s[i -R][j - R]);
}
}
cout << ans << endl;
return 0;
}
上一篇:
通过多线程提高代码的执行效率例子
