麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Leetcode 85 - Maximal Rectangle(dp)

2019-11-10 19:55:33
字體:
來源:轉載
供稿:網友

題意

給定一個由01組成的矩形,要求找出矩形內由1組成的面積最大的矩形面積。

思路

之前寫過一道類似的題,由若干個長度為1,高度不同的矩形連在一起,求最大矩形面積。這道題其實是類似的,我們只需要預處理出在位置[i, j]上,最大的1的高度,然后一行一行的處理,就和之前那道題相同了。

狀態表示

h[i,j],位置[i, j]上1的最大高度。

l[i,j],位置[i, j]上,以h[i, j]為高度能向左延伸多少。

r[i,j],在位置[i, j]上,以當前高度能向右延伸多少。

轉移方程

h[i,j]直接預處理一下即可。

l[i,j]

h[i,j]>h[i,j?1]: l[i,j]=1h[i,j]≤h[i,j?1]: l[i,j]=1+l[i][j?1]再累加上j?1?l[i][j?1]之前的所有高度大于h[i,j]的。

r[i,j]

計算方法同l[i,j]

代碼

const int maxn = 505;class Solution {public: int h[maxn][maxn], l[maxn][maxn], r[maxn][maxn]; int maximalRectangle(vector<vector<char>>& matrix) { int m = matrix.size(); if (m) { int n = matrix[0].size(); int res = 0; //init height for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (matrix[i][j] == '1') { h[i][j] = i ? h[i - 1][j] + 1 : 1; } else { h[i][j] = 0; } } } //calculate l[j] && r[j]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { l[i][j] = 1; int t = j - 1; while (t >= 0 && h[i][j] <= h[i][t]) { l[i][j] += l[i][t]; t -= l[i][t]; } } for (int j = n - 1; j >= 0; j--) { r[i][j] = 1; int t = j + 1; while (t < n && h[i][j] <= h[i][t]) { r[i][j] += r[i][t]; t += r[i][t]; } res = max(res, h[i][j] * (l[i][j] + r[i][j] - 1)); } } return res; } return 0; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产在线精品一区二区三区不卡 | 一本免费视频 | 久久精品a一级国产免视看成人 | 在线一级片 | 91午夜在线观看 | 成人毛片在线免费观看 | 欧美成人综合视频 | 久久99精品久久久久久秒播蜜臀 | free国产hd老熟bbw | 一级看片免费视频 | 免费国产在线观看 | va免费视频 | 国产精品刺激对白麻豆99 | 主播粉嫩国产在线精品 | 2019天天干夜夜操 | 免费看日韩av | 亚洲欧美国产精品va在线观看 | 男男啪羞羞视频网站 | 久久精品视频首页 | 鲁人人人鲁人人鲁精品 | 成人毛片100部 | 禁漫天堂久久久久久久久久 | 亚洲va久久久噜噜噜久久男同 | 成人毛片网 | 91精品国产刺激国语对白 | 免费国产一区二区视频 | 亚洲精品永久视频 | 精品国产91一区二区三区 | 黄色毛片免费看 | 国产中出在线观看 | 色无极影院亚洲 | 巨乳毛片 | 在线播放黄色网址 | 中文字幕国产日韩 | 中文字幕一区二区三区四区 | 成人在线观看免费高清 | 一区二区久久久久草草 | 日韩视频精品一区 | av免费在线播放网址 | 久久久一区二区三区四区 | 精品在线一区二区三区 |