AcWing 99 雷射炸彈(矩陣字首和)

2021-10-23 03:55:45 字數 1263 閱讀 1896

整理的演算法模板:acm演算法模板總結(分類詳細版)

地圖上有 nn 個目標,用整數xi,yixi,yi表示目標在地圖上的位置,每個目標都有乙個價值wiwi。

注意:不同目標可能在同一位置。

現在有一種新型的雷射炸彈,可以摧毀乙個包含 r×rr×r 個位置的正方形內的所有目標。

雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其**範圍,即那個正方形的邊必須和x,yx,y軸平行。

求一顆炸彈最多能炸掉地圖上總價值為多少的目標。

輸入格式

第一行輸入正整數 nn 和 rr ,分別代表地圖上的目標數目和正方形的邊長,資料用空格隔開。

接下來nn行,每行輸入一組資料,每組資料報括三個整數xi,yi,wixi,yi,wi,分別代表目標的xx座標,yy座標和價值,資料用空格隔開。

輸出格式

輸出乙個正整數,代表一顆炸彈最多能炸掉地圖上目標的總價值數目。

資料範圍

0≤r≤1090≤r≤109

0輸入樣例:

2 1

0 0 1

1 1 1

輸出樣例:

1
難度:簡單

時/空限制:10s / 168mb

總通過數:2577

總嘗試數:7169

演算法標籤

思路:

子矩陣的字首和

由於每個炸彈的**範圍是rxr的正方形內部,邊上的不能炸到,所以能炸到的點為(r-1)x(r-1) 個;求完矩陣字首和,然後列舉每乙個(r-1)x(r-1)矩陣的和,然後取最大值即可;

#include using namespace std;

const int n=5005;

int s[n][n];

int main()

for(int i=1;i<5001;i++)

for(int j=1;j<5001;j++) s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];

int ans=-1;

for(int i=r;i<5001;i++)

for(int j=r;j<5001;j++)

ans=max(ans,s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r]);

cout <}

AcWing 99 雷射炸彈 區間字首和

acwing 99.雷射炸彈 地圖上有 n 個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。注意 不同目標可能在同一位置。現在有一種新型的雷射炸彈,可以摧毀乙個包含 r r 個位置的正方形內的所有目標。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其 範圍,即那個正方...

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 列舉所有...

99 雷射炸彈

假設邊長為2,該題就是將邊長為2的正方形從左到右平移,然後換下一行從左到右平移,邊平移邊記錄該區域內的總值,最終取乙個最大的 字首和 a 1 a 2 a 3 a n s i a 1 a 2 a i a 3 a 4 a 15 s 15 s 2 include using namespace std c...