#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f
using namespace std;
const int maxn = 5005;
int h[maxn];
int solve(int l, int r)
{
int Min = INF;
int sum, flag = l;
for (int i = l; i <=r; i++) {
Min = min(Min, h[i]);
}
for (int i = l; i <=r; i++)h[i] -= Min;
sum = Min;
for (int i = l; i <=r; i++) {
if (h[i] == 0) {
if (flag == i) {
flag++;
continue;
}
sum += solve(flag, i - 1);
flag = i + 1;
}
}
if (h[r] != 0)sum += solve(flag, r);
sum = min(sum, r - l + 1);
return sum;
}
int main()
{
int n;
cin >> n;
for (int i = 1; i <=n; i++)
cin >> h[i];
int ans = solve(1, n);
cout << ans<< endl;
return 0;
}
codeforces 448C 分治
最新推荐文章于 2023-07-26 22:59:00 发布