給出乙個
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的正方形內的所有的目標。現在地圖...