動態規劃-直方圖內最大矩形
阿新 • • 發佈:2019-01-29
有一個直方圖,用一個整數陣列表示,其中每列的寬度為1,求所給直方圖包含的最大矩形面積。比如,對於直方圖[2,7,9,4],它所包含的最大矩形的面積為14(即[7,9]包涵的7x2的矩形)。
給定一個直方圖A及它的總寬度n,請返回最大矩形面積。保證直方圖寬度小於等於500。保證結果在int範圍內。
動態規劃方法,構建動態陣列dp[i][j],含義是從第i個元素到第j個元素構成矩形最大面積。
分析:
dp[i][j]最大結果只與A[j]大小有關,dp[i][j]有下列四種情況,第一種情況與第二種情況可理解為一種情況,取最左邊和最右邊兩者的最小值作為高的矩形。程式碼如下:
class MaxInnerRec { public: int countArea(vector<int> A, int n) { // write code here vector<vector<int>>dp(n); for(int i=0;i<n;i++) dp[i].resize(n); for(int i=0;i<n;i++) dp[i][i]=A[i]; for(int k=1;k<=n;k++) { for(int i=0;(i+k)<n;i++) { int min=A[i]; for(int j=i+1;j<=(i+k);j++) { if(A[j]<min) min=A[j]; } dp[i][i+k]=max(dp[i][i+k-1],dp[i+1][i+k]); dp[i][i+k]=max(min*(k+1),dp[i][i+k]); } } return dp[0][n-1]; } };