最大正方形(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 ...