输入的第一行是一个整数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; }