题目
输入输出格式
输入格式:
输入文件的第一行为正整数
n
n
和正整数,接下来的
n
n
行每行有3个正整数,分别表示 ,
yi
y
i
,
vi
v
i
。
输出格式:
输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767)。
输入输出样例
输入样例#1:
2 1
0 0 1
1 1 1
输出样例#1:
1
分析
看起来很难,实际上就是求一个二维前缀和就行了,然后遍历每一点,得出最大值。
上代码
#include<bits/stdc++.h>
using namespace std;
int n,r,v[5021][5021],ans,x,y,vi;
int main(){
scanf("%d%d",&n,&r);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&x,&y,&vi);
v[x+1][y+1]=vi;
}
for(int i=1;i<=5001;i++)
for(int j=1;j<=5001;j++)
v[i][j]+=v[i-1][j]+v[i][j-1]-v[i-1][j-1];
for(int i=0;i<=5000-r;i++)
for(int j=0;j<=5000-r;j++)
ans=max(ans,v[i+r][j+r]-v[i+r][j]-v[i][j+r]+v[i][j]);
printf("%d\n",ans);
return 0;
}