中南大学复试上机:1023: 巨人排队

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); 
}
}

 

点赞