傳送門
思想:兩邊最長上升子序列
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 100+10
int a[MAX] = { 0 };
int f[MAX] = { 1 };
int g[MAX] = { 0 };
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
f[i] = 1;
g[i] = 1;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j < i; j++)
if (a[j] < a[i])
f[i] = max(f[i], f[j] + 1);
for (int i = n; i >= 1; i--)
for (int j = i; j <= n; j++)
if (a[j] < a[i])
g[i] = max(g[i], g[j] + 1);
int m = 0, t = 0;
for (int i = 1; i <= n; i++) {
t = f[i] + g[i] - 1;
if (t > m)
m = t;
}
cout << n - m;
return 0;
}