1023: 巨人排队
时间限制: 1 Sec 内存限制: 128 MB
题目描述
巨人国的小学生放假了,老师要给小朋友们排队了。可是这个老师有强迫症,一定要路队上的小朋友按照身高从高到矮排序(也就是排在前面的不能比后面的矮)。小朋友呢也很调皮,一旦老师给他排好队就不愿意动了。这个时候小朋友们一个一个的从教室里出来了,每个小朋友一出来老师就要给小朋友安排好位置。请问老师最少要给小朋友排几条路队呢?
输入
对于每组数据,第一行两个数n,表示小朋友总数量(1<=n<=100000)
第二行n个整数,表示小朋友身高,身高不超过30000(我也觉得很吓人)
输出
对于每组数据,输出一个整数,表示最少的路队数
样例输入
<span style="color:#333333"><span style="color:#333333">8
389 207 155 300 299 170 158 65</span></span>
样例输出
<span style="color:#333333"><span style="color:#333333">2</span></span>
提示
最少要排两条路队,其中一种方案是398-207-155-65 和 300-299-170-158
来源/分类
思想·:贪心算法,每次我都在所有队列中找到最矮的,且比当前出来学生高的的孩子。
#include<stdio.h>
int a[1010];//记录每个队列最矮的学生
int ans;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int i,j;
ans = 0;
for(j=0;j<n;j++){
int x;
int ind =-1;
scanf("%d",&x);
int min = 30010;
for(i=0;i<ans;i++){
if(a[i]>=x&&a[i]<min){
ind = i;
min =a[i];
}
}
if(ind>=0){
a[ind]=x;
}
else{
a[ans++] = x;
}
}
printf("%d\n",ans);
}
}