解题思路:第一颗导弹不管怎样肯定是占用第一个系统,以后再来的第二个导弹如果小于第一个导弹的高度那么就不需要增加系统,假设大于第一颗导弹的高度,那么现在就需要增加一个导弹系统,这时再来第三颗导弹高度都小于前两个导弹系统所能拦截的最大高度,根据贪心原则,我们要比较前两个系统所能拦截的高度,选择高度较小的那个系统,这样才能做到不浪费,这时候更新前面选择的导弹系统的最小值,以此类推枚举所有导弹就可以了
下面附上ac代码
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int s[1005];
int main()
{
int n=1,k=1;
while(cin>>a[n]) n++;
s[k]=a[1];
int idx;
for(int i=2;i<=n;i++)
{
idx=0;
for(int j=1;j<=k;j++)
{
if(s[j]>=a[i]) //这里要有等于号
{
if(idx==0){
idx=j;
}
else if(s[idx]>s[j]){
idx=j;
}
}
}
if(idx==0)
{
k++;
s[k]=a[i];
}
else{
s[idx]=a[i];
}
}
cout<<k<<endl;
//system("pause");
return 0;
}