Problem : 1257 ( 最少拦截系统 ) Judge Status : Accepted
RunId : 2672168 Language : G++ Author : huwenbiao
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
RunId : 2672168 Language : G++ Author : huwenbiao
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
/***************************************************************\
*Author:Hu Wenbiao
*Created Time: Sat 24 Jul 2010 09:08:02 AM CST
*File Name: main.cpp
*Description:将各个拦截系统的高度保存,如果新的导弹比正在运行的
*系统所能打到的高度都高,则另开一个系统,否则用比它高的系统中最
*低的那个来打它,更新那个系统的高度
\***************************************************************/
//*========================*Head File*========================*\\
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*----------------------*Global Variable*----------------------*/
int sum,n,a,arr[30000];
//*=======================*Main Program*=======================*//
using namespace std;
int cmp(const void* a,const void* b){
return (*(int*)a)-(*(int*)b);
}
int main(){
//freopen("input","r",stdin);
while(scanf("%d",&n)!=EOF){
sum=0;
while(n--){
scanf("%d",&a);
qsort(arr,sum,sizeof(int),cmp);//arr存放各系统的高度
int i;
for(i=0;i<sum;i++){
if(arr[i]>a){//用与a的差最小的来打它
arr[i]=a;
break;
}
}
if(i==sum){//没有比a高度大的,另开一个系统
arr[sum]=a;
sum++;
}
}
printf("%d\n",sum);
}
}