最长上升序列的改版,我也没用太聪明的办法,枚举了中间点k然后再填表。
#include<stdio.h>
int d[105][105]={0},t[105]={0};
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",t+i);
for(int j=0;j<n;j++)
d[i][j]=1;
}
for(int m=0;m<n;m++){
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(i<=m){
if(t[j]<t[i]){
if(d[i][m]<d[j][m]+1){
d[i][m]=d[j][m]+1;
}
}
}
else{
if(t[j]>t[i]){
if(d[i][m]<d[j][m]+1){
d[i][m]=d[j][m]+1;
}
}
}
}
}
}
int max=0;
for(int m=0;m<n;m++){
for(int i=0;i<n;i++){
if(max<d[i][m])max=d[i][m];
}
}
printf("%d",n-max);
}