二維字首和 雷射問題Acwing99

2021-10-09 14:28:38 字數 1123 閱讀 9315

雷射問題

題目:地圖上有 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軸平行。若目標位於爆破正方形的邊上,...