bzoj1218 HNOI2003 雷射炸彈題解

2022-08-19 14:36:13 字數 1191 閱讀 2435

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

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

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

2 10 0 1

1 1 1

1這道題目就是乙個二維

片段和啊

可是這道題目非常噁心,它卡你空間

平常片段和,在加數時$a[i][j]+=add;$

$f[i][j]=f[i][j]-f[i][j-1]-f[i-1][j]+f[i-1][j-1]+a[i][j]$

但是,這道題目只給你開乙個陣列!!

於是,我們可以換一種方法

$a[i][j]+=a[i-1][j]$

$a[i][j]+=a[i][j-1]$

這兩個時等價的

所以,這道題目就是一道比較簡單的題目

#include #include 

#include

using

namespace

std;

intans,n,m;

int a[5005][5005

];int read()

intmain()

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

for (int j=1;j<=5000;++j) a[i][j]+=a[i-1

][j];

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

for (int j=1;j<=5000;++j) a[i][j]+=a[i][j-1

];

for (int i=m;i<=5000;++i)

for (int j=m;j<=5000;++j)

ans=max(ans,a[i][j]-a[i-m][j]-a[i][j-m]+a[i-m][j-m]);

printf(

"%d\n

",ans);

return0;

}

view code

bzoj 1218 HNOI2003 雷射炸彈

description 在長為5001的正方形矩陣中,有n個特殊的點,有相應的值。現在用乙個與x,y軸平行的長為r的正方形矩陣套點 不含邊緣 使裡面的特殊點的總值最大。input 輸入檔案的第一行為正整數n和正整數r,接下來的n行每行有3個正整數,分別表示位置與值。output 輸出檔案僅有乙個正整...

bzoj1218 HNOI2003 雷射炸彈

題目傳送門 看到十秒果斷想到暴力,結果一維字首和優化tle了,只好去 了一發二維字首和。花了幾分鐘看了一下,發現其實就是個簡單的容斥原理。以矩陣的右下角作為描述點,預處理出所有的矩陣f i j 表示從 1,1 到 i,j 所有值的和。那麼如圖所示 要求的部分就是紅色部分。設紅色部分右下角的座標為 n...

BZOJ 1218(HNOI2003) 雷射炸彈

一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 10000 個目標,用整數xi,yi 0 xi,yi 5000 表示目標在地圖上的位置,每個目標都有乙個價值0第一行為正整數n和正整數r,接下來的n行每行有3個正整數,分別表示xi,yi,vi 僅有乙個正整數,表示一...