输入的第一行是一个整数N(2 <= N <= 100),表示同学的总数。 第一行有n个整数,用空格分隔,第i个整数Ti(130 <= Ti <= 230)是第i位同学的身高(厘米)。
可能包括多组测试数据,对于每组数据, 输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
8 186 186 150 200 160 130 197 220
4
#include<stdio.h>
int main(void){
int n;
while(scanf("%d",&n)!=EOF){
int a[n];
//读入数据
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
//建立两个数组,一个从左往右看递增,一个从右往左看递增
int b[n];
int c[n];
b[0]=1;
c[n-1]=1;
//当轮到i时,找到他前面所有比它个子小的所有的,然后看他们能都排到第几个,则i的位置就是找出来的数+1
for(int i=1;i<n;i++){
int max=0;
int jl=-1;
for(int j=0;j<i;j++){
if(a[j]>=a[i]){
continue;
}
if(b[j]>max){
jl=j;
max=b[j];
}
}
if(jl==-1){
b[i]=1;
}else{
b[i]=b[jl]+1;
}
}
for(int i=n-2;i>=0;i--){
int max=0;
int jl=-1;
for(int j=n-1;j>i;j--){
if(a[j]>=a[i]){
continue;
}
if(c[j]>max){
jl=j;
max=c[j];
}
}
if(jl==-1){
c[i]=1;
}else{
c[i]=c[jl]+1;
}
}
int sum[n];
for(int i=0;i<n;i++){
sum[i]=c[i]+b[i];
}
int jz=0;
for(int i=0;i<n;i++){
if(sum[i]>jz){
jz=sum[i];
}
}
printf("%d",n-(jz-1));
}
return 0;
}