#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#define maxn 1005
using namespace std;
int dp1[maxn];
int dp2[maxn];
int nums[maxn];
int main()
{
//freopen("data.in","r",stdin);
ios::sync_with_stdio(false);
memset(dp1, 0, sizeof(dp1));
memset(dp2, 0, sizeof(dp2));
memset(nums, 0, sizeof(nums));
int n;
cin >> n;
for(int i = 1; i <= n; ++i)
{
cin >> nums[i];
}
//从前往后找非上升
for(int i = 1; i <= n; ++i)
{
dp1[i] = 1;
for(int j = 1; j <i; ++j)
{
if(nums[j] >= nums[i])
{
dp1[i] = max(dp1[i], dp1[j]+1);
}
}
}
//从后往前找非下降
for(int i = n; i >= 1; i--)
{
dp2[i] = 1;
for(int j = i + 1; j <= n; ++j)
{
if(nums[i] <= nums[j])
{
dp2[i] = max(dp2[i], dp2[j] + 1);
}
}
}
int res = -999999999;
for(int i = 1; i <= n; ++i)
{
res = max(res, dp1[i]+dp2[i]-1);
}
cout << n - res << endl;
return 0;
}
计蒜客 删除最少的元素(DP)
最新推荐文章于 2019-10-18 10:07:31 发布