P2280 HNOI2003 雷射炸彈

2021-08-22 19:26:52 字數 1313 閱讀 8158

雷射炸彈

一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n(n<=10000)個目標,用整數xi,yi(其值在[0,5000])表示目標在地圖上的位置,每個目標都有乙個價值。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其爆破範圍,即那個邊長為r的正方形的邊必須和x,y軸平行。若目標位於爆破正方形的邊上,該目標將不會被摧毀。

輸入格式:

輸入檔名為input.txt

輸入檔案的第一行為正整數n和正整數r,接下來的n行每行有3個正整數,分別表示 xi,yi ,vi 。

輸出格式:

輸出檔名為output.txt

輸出檔案僅有乙個正整數,表示一顆炸彈最多能炸掉地圖上總價值為多少的目標(結果不會超過32767)。

輸入樣例#1:

2 1

0 0 1

1 1 1

輸出樣例#1:

1本題為字首和;

本題是很模板的字首和題目了,先處理出字首和,然後再暴力列舉每個點,得出答案即可。a[i][j]表示從(0,0)到(i,j)的價值總和

那麼怎麼求字首和呢?這裡我用乙個圖來解釋。假設我們要求中間的小埋色方塊的價值,我們就可以用劃線方塊減掉原諒綠和基佬紫方塊。但實際操作只允許我們減起點為(0,0)的方塊,所以我們就改用劃線方塊減掉姨媽紅圈圈,再加上重複減的基佬紫方塊。

本題地圖的起點是(0,0),所以陣列是0~5000的,記得迴圈到5001哦(畢竟一共5001個數嘛)

#include 

#include

#include

#include

using

namespace

std;

int n,r,ans;

int a[5010][5010];

int main()

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

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

a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];//字首和

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

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

ans=max(ans,a[i][j]+a[i-r][j-r]-a[i-r][j]-a[i][j-r]);//暴力列舉

printf("%d",ans);

return

0;}

P2280 HNOI2003 雷射炸彈

輸入輸出格式 輸入格式 輸入檔名為input.txt 輸入檔案的第一行為正整數n和正整數r,接下來的n行每行有3個正整數,分別表示 xi,yi vi 輸出格式 輸出檔名為output.txt 輸出檔案僅有乙個正整數,表示一顆炸彈最多能炸掉地圖上總價值為多少的目標 結果不會超過32767 輸入樣例 1...

P2280 HNOI2003 雷射炸彈

輸入格式 輸入檔名為input.txt 輸入檔案的第一行為正整數n和正整數r,接下來的n行每行有3個正整數,分別表示 xi,yi vi 輸出格式 輸出檔名為output.txt 輸出檔案僅有乙個正整數,表示一顆炸彈最多能炸掉地圖上總價值為多少的目標 結果不會超過32767 輸入樣例 1 2 1 0 ...

洛谷P2280 HNOI2003 雷射炸彈

題目描述 輸入輸出格式 輸入格式 輸入檔名為input.txt 輸入檔案的第一行為正整數n和正整數r,接下來的n行每行有3個正整數,分別表示 xi,yi vi 輸出格式 輸出檔名為output.txt 輸出檔案僅有乙個正整數,表示一顆炸彈最多能炸掉地圖上總價值為多少的目標 結果不會超過32767 輸...