雷射問題
題目:地圖上有 n 個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。
注意:不同目標可能在同一位置。
現在有一種新型的雷射炸彈,可以摧毀乙個包含 r×r 個位置的正方形內的所有目標。
雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其**範圍,即那個正方形的邊必須和x,y軸平行。
求一顆炸彈最多能炸掉地圖上總價值為多少的目標。
輸入格式
第一行輸入正整數 n 和 r ,分別代表地圖上的目標數目和正方形的邊長,資料用空格隔開。
接下來n行,每行輸入一組資料,每組資料報括三個整數xi,yi,wi,分別代表目標的x座標,y座標和價值,資料用空格隔開。
輸出格式
輸出乙個正整數,代表一顆炸彈最多能炸掉地圖上目標的總價值數目。
資料範圍
0≤r≤10^9
0該題是乙個值得思考的二維字首和問題。思維巧妙,將以(x, y)為**中心點的情況,轉移至以(x, y)為右下角思考左上方的總體情況,這種思想在字首和和動態規劃有可能會出現。
/*
求乙個矩形範圍的總價值,由此可以想到求字首和降低複雜度
若每個範圍的總價值用暴力求解 m 次 時間複雜度為 o( m * n ^ 2 )
使用字首和時間複雜度為 o(n ^ 2)
*/#include
#include
#include
#include
using
namespace std;
const
int n =
5050
;//點的座標最大為5000
int f[n]
[n];
//記錄輸入時每個點的總價值,同時也是二維字首和陣列——記錄以(x, y)為右下角範圍的字首和。
intmain()
for(
int i =
1; i <= n;i++)}
int ans =0;
//記錄最大價值
for(
int i = r ;i <= n;i ++)}
cout << ans << endl;
return0;
}
AcWing 99 雷射炸彈(二維字首和)
題目 題意 本題時間複雜度是o n 2 最大是5000 5000 0.25億,小於一億,所以可以直接可以用二維字首和模板。預處理字首和 for int i 1 i n i for int j 1 j m j s i j s i 1 j s i j 1 s i 1 j 1 int res 0 列舉所有...
雷射炸彈 二維字首和
或者 一種新型的雷射炸彈,可以摧毀乙個邊長為 r 的正方形內的所有的目標。現在地圖上有 n個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其 範圍,即那個邊長為 rr的正方形的邊必須和x,y軸平行。若目標位於爆破正方形的邊...
雷射炸彈 二維字首和
一種新型的雷射炸彈,可以摧毀乙個邊長為 r 的正方形內的所有的目標。現在地圖上有 n 個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其 範圍,即那個邊長為 r 的正方形的邊必須和x,y軸平行。若目標位於爆破正方形的邊上,...