CODEVS1159 最大全0子矩陣解題報告

2021-07-01 23:21:09 字數 915 閱讀 4957

題目描述 description

在乙個0,1方陣中找出其中最大的全0子矩陣,所謂最大是指o的個數最多。

輸入描述 input description

輸入檔案第一行為整數n,其中1<=n<=2000,為方陣的大小,緊接著n行每行均有n個0或1,相鄰兩數間嚴格用乙個空格隔開。

輸出描述 output description

輸出檔案僅一行包含乙個整數表示要求的最大的全零子矩陣中零的個數。

樣例輸入 sample input 5

0 1 0 1 0

0 0 0 0 0

0 0 0 0 1

1 0 0 0 0

0 1 0 0 0

樣例輸出 sample output 9

這是很久以前做的題了,當時並沒有做出來,而是看的題解。今天突然想起來它,覺得有一些思路還是非常好的。

這其實是2023年國家集訓隊**的一道例題,使用的是極大化的思想;即,尋找最優解的某種性質,按照這種性質進行列舉,從而減少了列舉量,實現了優化的目的。

顯然,在最大全0子矩形中,會存在這樣一條豎線,它至少有一端是1;按照這種想法思考,假如我們確定了矩形下邊界所在的行,那麼就可以列舉每一列的豎線,計算其向左向右所能抵達的最遠距離,從而算得它平移出的最大全0子矩形的面積,而這顯然是單調棧的經典應用。而所謂懸線法,其實跟這種做法沒有太大差別,但它挖掘出了從上一層可以傳到下一層的一些東西,即實際上當前層懸線的最左最右距離是可以借助上一層推出的。

江蘇省隊的**裡還提到了最大全0子立方體,列舉兩個平面其實就可以很簡單地把它壓倒二維情況,而我感覺實際上它應該還會有o(n^3)的做法的,但是我思考了很久仍然沒有思路。

這道題給我的總結是:

①一維的情況可以鋪成二維,而二維的情況又往往可以壓成一維。

②最優解的一些性質(極大化等等)往往可以幫助我們改變列舉方向。

codevs 1159 最大全0子矩陣

時間限制 1 s 空間限制 128000 kb 題目描述 description 在乙個0,1方陣中找出其中最大的全0子矩陣,所謂最大是指o的個數最多。輸入描述 input description 輸入檔案第一行為整數n,其中1 n 2000,為方陣的大小,緊接著n行每行均有n個0或1,相鄰兩數間嚴...

codevs1159 最大全0子矩陣

題目描述 description 在乙個0,1方陣中找出其中最大的全0子矩陣,所謂最大是指o的個數最多。輸入描述 input description 輸入檔案第一行為整數n,其中1 n 2000,為方陣的大小,緊接著n行每行均有n個0或1,相鄰兩數間嚴格用乙個空格隔開。輸出描述 output des...

1159 最大全0子矩陣

f i,j 表示以 i,j 為右下角的最大全0子矩陣的邊長 若a i j 1,f i,j 0 否則 f i,j min 1 這樣求得的是最大全0正方形子矩陣 要求長方形矩陣,上述思路行不通 假設以 i,j 為右下角的最大矩陣 12 它可能是3 4 4 3 2 6 6 2 1 12 12 1 按上述思...