動態規劃法 入門 最大正方形 最大長方形

2021-09-25 10:00:21 字數 1448 閱讀 8162

最大正方形(largest square)

題意:現有h*w個邊長為1cm的正方形瓷磚排列在一起,其中有一部分瓷磚有汙跡,求僅有乾淨瓷磚構成的最大正方形的面積。

輸入

4 50 0 1 0 0

1 0 0 0 0

0 0 0 1 0

0 0 0 1 0

輸出4

首先,我們設乙個dp陣列,其中dp[i][j]表示第(i,j)個位置向左上方擴充套件形成的最大正方形的邊長值。

也就是說dp[i][j]的值有它上方,左方,左上方三個點的最小值+1確定的。就是如下式子:

}cout<最大長方形(largest rectangle)

將正方形改為長方形了,味道就完全不一樣了噢。輸入還是一樣。不一樣的是:

我們需要用t表記錄各元素向上存在多少個連續的乾淨瓷磚。可以利用規劃法很輕鬆的求出。

將求最大長方形個數轉化為求最大連續起來的長方形的面積。我們建立乙個存放長方體高度和起始位置的棧。

基本操作如下:

#include#include#include#include#define max 1400

using namespace std;

int h,w;

int buffer[max][max];

int t[max][max];

struct rectangle;

int getlargestrectangle(int size,int buffer) else

//本次入棧的矩形參與的面積會在之後算起

rect.pos=target;

s.push(rect);

} } }

return maxv;

}int main()

//建立豎直方向上的最高有效高度

for(int i=0;i0)?t[i-1][j]+1:1;

} int maxv = 0;

for(int i=0;i

cout<

return 0;

}

最大子正方形 (!) 動態規劃

背景描述 忙完了學校的事,v神終於可以做他的 正事 陪女朋友散步。一天,他和女朋友走著走著,不知不覺就來到了乙個千里無菸的地方。v神正要往回走,如發現了一塊牌子,牌子上有有一行小字和一張圖,小字說道 找到圖上最大的交錯正方形之後和我聯絡,這塊地就是你的了。在房價瘋長的年代,v神當然不願錯過這個機會,...

動態規劃 面積最大正方形

給定乙個矩陣,其中的元素為0或者1,要求找出其中元素全為1的面積最大的正方形。如下圖的矩陣,其元素全為1的最大正方形面積為4。方法一 對於每乙個元素,把以其為右下角的矩陣的和求出來,然後根據這個和與左上邊的元素的和的關係來求解。但這種方法時間和空間複雜度都較高。public int maximals...

221 最大正方形 動態規劃

題目描述 在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 方法1 動態規劃 主要思路 1 該方法的實現比較簡單,主要是能夠理解動態轉移公式 dp i j min ...