思路
DP,类似于 【洛谷P1020】导弹拦截(DP+贪心),O(n²)
设dp[i]为包含横坐标i的最大矩形面积,则dp[i] = max{ (i-j+1)*min{Hi~Hj} } (j∈[0, i])
#include <iostream>
using namespace std;
const int inf = 1e9;
int a[1005];
int dp[1005];
int main()
{
int n,hmin,smax=-1;
cin>>n;
for(int i=0; i<n; ++i) cin>>a[i];
for(int i=0; i<n; ++i)
{
hmin = inf;
for(int j=i; j>=0; --j)
{
hmin = min(hmin, a[j]);
dp[i] = max(dp[i], (i-j+1)*hmin);
}
}
for(int i=0; i<n; ++i) smax = max(smax, dp[i]);
cout<<smax;
return 0;
}