luogu 1091
正反做两次最长上升子序列。
记f[i]为正着做以Ti为结尾的最长上升子序列。
记g[i]为倒着做以Ti为结尾的最长上升子序列。
答案就是n-max(f[i]+g[i]-1)。
#include"cstdio" #include"cctype" #include"algorithm" using namespace std; int read() { int c,x=0; while(!isdigit(c=getchar())); while(x=x*10+c-'0',isdigit(c=getchar())); return x; } int t[101],f[101],g[101]; int main() { int n=read(),ans=0; for(int i=1; i<=n; i++) { t[i]=read(); f[i]=1; for(int j=1; j<i; j++) if(t[i]>t[j]) f[i]=max(f[j]+1,f[i]); } for(int i=n; i>=1; i--) { g[i]=1; for(int j=n; j>i; j--) if(t[i]>t[j]) g[i]=max(g[j]+1,g[i]); ans=max(f[i]+g[i]-1,ans); } printf("%d",n-ans); return 0; }