91分蒟蒻求助,#8 WA

P2280 [HNOI2003] 激光炸弹

有些地方算不到。 满分代码: ```c++ #include<bits/stdc++.h> using namespace std; const int maxn = 5e3 + 5; int s[maxn][maxn]; int n, m; int main(){ cin >> n >> m; int maxx = 0, maxy = 0; for (int i = 1; i <= n; i++){ int x, y; cin >> x >> y; maxx = max(maxx, x + 1); maxy = max(maxy, y + 1); cin >> s[x + 1][y + 1]; } for (int i = 1; i < maxn; i++){ for (int j = 1; j < maxn; j++){ s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1]; } } int maxs = 0; // if (m > maxx) m = maxx; // if (m > maxy) m = maxy; for (int i = m; i < maxn; i++){ for (int j = m; j < maxn; j++){ maxs = max(maxs, (s[i][j] - s[i - m][j] - s[i][j - m] + s[i - m][j - m])); } } cout << maxs; return 0; }
by AL_Blue @ 2023-06-02 16:47:24


更正一下我发的楼上,就是有些时候炸弹太大,一次性炸下去全部点都没得了,所以得判断一下,代码如下: ```c++ #include<bits/stdc++.h> using namespace std; const int maxn = 5e3 + 5; int s[maxn][maxn]; int n, m; int main(){ cin >> n >> m; int maxx = 0, maxy = 0; for (int i = 1; i <= n; i++){ int x, y; cin >> x >> y; maxx = max(maxx, x + 1); maxy = max(maxy, y + 1); cin >> s[x + 1][y + 1]; } for (int i = 1; i <= maxx; i++){ for (int j = 1; j <= maxy; j++){ s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1]; } } int maxs = 0; int m1 = min(m, maxx); int m2 = min(m, maxy); for (int i = m1; i <= maxx; i++){ for (int j = m2; j <= maxy; j++){ maxs = max(maxs, (s[i][j] - s[i - m1][j] - s[i][j - m2] + s[i - m1][j - m2])); } } cout << maxs; return 0; } ```
by AL_Blue @ 2023-06-02 17:02:53


|