标签:而在 mes strong span 题解 等价 code pac name
# 题意
炸弹可以摧毁变长为R的正方形内部的所有目标,不包括边上的,n个目标,每个目标有一个价值,爆炸范围必须与x,y轴平行,求正方形最大包含的价值数
# 题解
预处理二维前缀和,从边长允许的范围内开始枚举,取最大值即可,题目要求不能将边上的计算,题目中的坐标表示的是一个点,而在矩阵中枚举的是一个格子,可以认为在坐标系中所有点的坐标都+0.5,因为遍历所有正方形的可能分布,所以两个问题是等价的
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=5100; 4 int n,r; 5 int s[N][N]; 6 int max_x,max_y; 7 int main(){ 8 ios::sync_with_stdio(0); 9 cin.tie(0); 10 cout.tie(0); 11 cin>>n>>r; 12 max_x=max_y=r; 13 while(n--){ 14 int x,y,w; 15 cin>>x>>y>>w; 16 x++; 17 y++; 18 s[x][y]=w; 19 max_x=max(x,max_x); 20 max_y=max(y,max_y); 21 } 22 for(int i = 1; i <= max_x; i++) 23 for(int j = 1; j <= max_y; j++) 24 s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+s[i][j]; 25 int ans=0; 26 for(int i = r; i <= max_x; i++) 27 for(int j = r; j <= max_y; j++) 28 ans=max(ans , s[i][j] - s[i-r][j] - s[i][j-r] + s[i-r][j-r]); 29 cout<<ans<<endl; 30 }
标签:而在 mes strong span 题解 等价 code pac name
原文地址:https://www.cnblogs.com/hhyx/p/12411924.html