题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2075.html
具体思路:首先,没有必要全部输入完之后再去重新判断,完全可以一边输入一遍判断。每输入一个数,就在已经存在的导弹中寻找一个能够大于或者等于这个高度的,如果有的话,再从中选择这个满足高度中最小的那一个,如果没有,就再加一个新的导弹。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int b[100000];//用来存导弹的个数和高度
int main()
{
int n;
while(cin>>n)
{
memset(b,0,sizeof(b));
int temp;
int cnt=0;
for(int i=1; i<=n; i++)
{
int flag=1;
cin>>temp;
for(int j=1; j<=cnt; j++)
{
if(b[j]>=temp)
{
b[j]=temp;
flag=0;
break;
}
}//寻找符合条件的导弹的过程
if(flag==1)
{
b[++cnt]=temp;
}//如果没有,就再增加一个导弹。
}
cout<<cnt<<endl;
}
return 0;
}
//数组b里面的数是按照从小到大排的。