题目链接
http://bailian.openjudge.cn/practice/4133/
分析一波
炸弹的波及范围为d,也就是需要在{(x, y)| x0 - d <= x <= x0 + d, y0 - d <= y <= y0 + d}范围内寻找最大价值,使价值最大的(x0, y0)就是最大价值投放点。
因为必须要让炸弹波及范围包含垃圾点才可以产生价值,所以(x0, y0)一定在某一垃圾点的d范围内。
解题代码
#include <cstdio>
#include <cstring>
struct point{
int x,y;
int m;
} p[21];
#define MAX 1025
int map[MAX][MAX];
int main(){
memset(p, 0, sizeof(p));
int d, n;
scanf("%d %d", &d, &n);
for(int i = 0; i < n; i++){
scanf("%d %d %d", &p[i].x, &p[i].y, &p[i].m);
}
int ans = 0, np = 0;
for(int i = 0; i < n; i++){
for(int r = p[i].x - d; r <= p[i].x + d; r++){
if(r < 0 || r >= MAX) continue;
for(int c = p[i].y - d; c <= p[i].y + d; c++){
if(c < 0 || c >= MAX) continue;
map[r][c] += p[i].m;
if(ans < map[r][c]){
ans = map[r][c];
np = 1;
}
else if(ans == map[r][c]) np++;
}
}
}
printf("%d %d
", ans, np);
return 0;
}