题目:
https://www.luogu.com.cn/problem/P1091

思路:

相当于要求最长先升后降的序列

拆开来看,先从左到右求一遍最长不下降子序列

再从右到左求一遍最长不下降子序列

再枚举求最大值

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[104];
int f[104],g[104];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {        scanf("%d",&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=n;j>i;j--)
        {
            if(a[j]<a[i])
             g[i]=max(g[i],g[j]+1);
        }
    }
    int t=0;
    for(int i=1;i<=n;i++)
    {
        if(f[i]+g[i]-1>t)
            t=f[i]+g[i]-1;
    }
    printf("%d\n",n-t);
}