P2280 [HNOI2003]激光炸弹(70分)

题目描述

输入格式

输入文件名为input.txt

输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi 。

输出格式

输出文件名为output.txt

输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767)。

输入输出样例

输入 #1
2 1
0 0 1
1 1 1
输出 #1

 1

这题我真的不知道它为啥70

有的题解解法和我一样!!!

扫描二维码关注公众号,回复: 7304464 查看本文章

但是我就是70.。。。

// luogu-judger-enable-o2
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

#pragma GCC optimize(2)

#pragma GCC optimize(3)

const int Q=5005;

int n,r,i,j,x1,y1,x2,y2,ans=0,k,l,m1,m2;

bool cmp(int x,int y){
    return x>y;
}

int b[Q][Q],x,y,v[5005];

int main(){
    scanf("%d%d",&n,&r);
    x1=y1=9999;
    x2=y2=-9999;
    for(i=1;i<=n;i++){
        scanf("%d%d%d",&x,&y,&v[i]);
        m1=x+r-1;
        m2=y+r-1;
        if(m1>5000){
            m1=5000;
        }
        if(m2>5000){
            m2=5000;
        }
        for(j=x;j<=m1;j++){
            for(k=y;k<=m2;k++){
                b[j][k]+=v[i];
            }
        }
        if(x<x1){
            x1=x;
        }
        if(y<y1){
            y1=y;
        }if(x>x2){
            x2=x;
        }if(y>y2){
            y2=y;
        }
    }
    if(r==1){
        sort(v+1,v+1+n,cmp);
        printf("%d",v[1]);
        return 0;
    }
    for(i=x1;i<=x2;i++){
        for(j=y1;j<=y2;j++){
            if(b[i][j]>ans){
                ans=b[i][j];
            }
        }
    }
    printf("%d",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/hrj1/p/11538095.html
今日推荐