枚举

题目链接

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;
}
原文地址:https://www.cnblogs.com/zhangyue123/p/12596681.html