【LIS+LDS 对偶问题】 合唱队型
传送门
题意
给定一个长度为\(N\)的序列,去除最少的元素后序列先上升后下降,求最少去除元素的个数
数据范围
\(1\leq N\leq 1000\)
题解
登山问题的对偶问题,只需要总长度减去得到的最长的值即可
Code
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
#define ll long long
const int N=1010;
int n,f[N],F[N],a[N];
int main(){
scanf("%d",&n);
rep(i,1,n+1) scanf("%d",&a[i]);
rep(i,1,n+1) {
f[i]=1;
rep(j,1,i)
if(a[j]<a[i])
f[i]=max(f[i],f[j]+1);
}
per(i,1,n+1){
F[i]=1;
per(j,i+1,n+1)
if(a[j]<a[i])
F[i]=max(F[i],F[j]+1);
}
int ans=-1;
rep(i,1,n+1)
ans=max(ans,f[i]+F[i]-1);
ans=n-ans;
printf("%d\n",ans);
}