在乙個平面內隨機出現一些連續的區域,以這些區域構成乙個矩形,求最大的矩形面積。
解決這一類問題的思路是:列舉所有高度,通過記憶化記錄左右側最遠能到達的區域。
以下以乙個類似柱狀圖的模型來說明:
要求求出圖中最大的矩形面積。
圖中存在四個不同的高度。
高度1左右都沒有更高的,記l1=1,r1=1
高度2是最低的,記l2=1,r2=4
高度3左右都沒有更高的,記l3=1,r3=4
高度4左側有乙個更高的,記l4=3,r4=4
由於更高有繼承性(如已知a比b高,當b比c高時,c可以直接跳到a處)
該記憶化可以用以下**實現:
a[0]=-1;//高度要注意l和r的遍歷方向是不同的。a[n+1]=-1;
for(j,1,n)
l[j]=j,r[j]=j;//左右能到達
l[0]=1;
r[n+1]=n;
for(j,1,n)
while(a[l[j]-1]>=a[j])
l[j]=l[l[j]-1];
rof(j,n,1)
while(a[r[j]+1]>=a[j])
r[j]=r[r[j]+1];
複雜度為o(n)。
最大子矩陣 DP
time limit 10000ms memory limit 165888kb 64bit io format lld llu hysbz 1084 這裡有乙個n m的矩陣,請你選出其中k個子矩陣,使得這個k個子矩陣分值之和最大。注意 選出的k個子矩陣不能相互重疊。第一行為n,m,k 1 n 10...
最大子矩陣 dp
已知矩陣的大小定義為矩陣中所有元素的和。給定乙個矩陣,你的任務是找到最大的非空 大小至少是1 1 子矩陣。比如,如下4 4的矩陣 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩陣是 9 2 4 1 1 8 這個子矩陣的大小是15。輸入是乙個n n的矩陣。輸入的第一行給出n...
求矩陣的最大子矩陣面積
問題引入 求解直方圖中最大的矩形面積 核心思想 讓二維陣列轉換成多層的一維陣列,再根據一維陣列構建直方圖 主函式,讓二維陣列轉換成多層的一維陣列,再根據一維陣列構建直方圖 public intmaxrecsize int map int maxarea 0 int height newint map...