出處 http://zerojudge.tw/ShowProblem?problemid=b018
內容 :
露營時都搭過帳棚吧?但帳棚也不是說搭就搭,必須要有一塊平坦的空地才行,否則就必須要先整理場地,清除石塊、雜物才能搭好。但也不是說清理就清理,有時候如果出現很大塊的石頭或是大型的坑洞,帳篷就不得不避開這樣的地方。
清理好場地以後,要搭怎麼樣的帳棚呢?雖然大部分是依場地而定,但對於初學者可能還是以特定的形狀為宜。
現在給你一塊空地的資料,請你計算出在這營地上能夠搭建帳篷的最大面積。為了簡化問題,假設營地為一 L * W 的矩形,並分為 L * W 個方格,方格為場地的最小單位,一個方格內的場地特性視為一體。並限制所搭帳篷的形狀必須是正方形,且帳篷的四邊和營地的四邊分別對應平行。
輸入說明 :
輸入含有多筆測試資料,每筆資料第一行有兩個數字L, W(1 ≦ L, W ≦ 5000),代表場地的長和寬。接下來 L 行每行有 W 個介於0~2之間的整數,代表每一塊方格的資料,0代表此格可以直接使用,1表示必須經過整理,2表示有無法清理的障礙物。第一行為兩個零時表示檔案結束,不須處理這組輸入。
輸出說明 :
每筆資料輸出一行,含有一個正整數,代表最大帳篷的面積。
範例輸入 :
4 5
1 0 0 2 0
0 1 1 0 0
0 2 1 1 1
1 0 0 1 2
0 0
範例輸出 :
4
提示 :
* 注意:這個題目若直接宣告 5000 * 5000 的陣列會出 Runtime Error。請用較少的陣列解決這個問題。
出處 :
2006 NPSC 高中組初賽
解題策略
使用DP,
利用num[i][j]表示左上角為(0,0)右下角座標(i,j),範圍內所求的最大面積的邊長
num[i][j]為num[i-1][j-1],num[i][j-1],num[i-1][j]最小的加1
若座標(i,j)為無法清理的障礙物,則num[i][j]為0