雷射炸彈 模擬

2022-09-03 06:12:10 字數 2009 閱讀 6672

給出乙個

5000

×5000

' role="presentation" style="position: relative">5000

×5000

5000

×5000

的矩陣,每個格仔上都有權值,求用乙個n×

n' role="presentation" style="position: relative">n×n

n×n的框最多能框住多少?

考慮二位維字首和,設s[

i][j

]' role="presentation" style="position: relative">s[i

][j]

s[i]

[j]為以

(1,1

)' role="presentation" style="position: relative">(1,

1)(1

,1)為左上角,(i

,j)' role="presentation" style="position: relative">(i,

j)(i

,j)為右下角的矩陣的和。那麼根據容斥原理,易得:s[

i][j

]=s[

i−1]

[j]+

s[i]

[j−1

]−s[

i−1]

[j−1

]+a[

i][j

]' role="presentation">s[i

][j]

=s[i

−1][

j]+s

[i][

j−1]

−s[i

−1][

j−1]

+a[i

][j]

s[i]

[j]=

s[i−

1][j

]+s[

i][j

−1]−

s[i−

1][j

−1]+

a[i]

[j]那麼再列舉正方形的右下角求出每個矩陣的答案,再取最大值即可。 an

s=ma

x(s[

i][j

]−s[

i−m]

[j]−

s[i]

[j−m

]+s[

i−m]

[j−m

])' role="presentation" style="position: relative">ans

=max

(s[i

][j]

−s[i

−m][

j]−s

[i][

j−m]

+s[i

−m][

j−m]

)ans

=max

(s[i

][j]

−s[i

−m][

j]−s

[i][

j−m]

+s[i

−m][

j−m]

)

#include 

#include

using

namespace

std;

int n,m,s[5011][5011],x,y,lenn,lenm,ans;

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]+s[i][j]; //二維字首和

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

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

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

printf("%d\n",ans);

return

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...

雷射炸彈解題報告

雷射炸彈 問題描述 一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 10000 個目標,用整數xi,yi 其值在 0,5000 表示目標在地圖上的位置,每個目標都有乙個價值。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其爆破範圍,即那個邊長為r的正方形的邊...

HNOI2003 雷射炸彈

bzoj 1218 bzoj好像改版來著?暫時關了 求出f i j 代表從 1,1 到 i,j 這個矩陣的總價值和再列舉r r的矩形就好了 題目給了10s,放心暴力 不就是字首資料嘛。mdzz bzoj description 一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖...