贪心
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
int M,r,i,temp,g[10001];
while(scanf("%d",&M)!=EOF)
{
r=0;//初始化拦截系统数量,从零开始是为了第一个导弹数据输入时,一定会添加一个系统
while(M--)
{
scanf("%d",&temp);
for(i=0;i<=r;i++)
{
if(temp<=g[i]){g[i]=temp;break;}
}//筛选已有系统(从高度低开始到高度高)是否能拦截,有就拦截
if(i>r){g[i]=temp;r++;} //已有系统拦截不了,添加新系统
}
printf("%d\n",r);
}
return 0;
}
总结
1.贪心思路是优先保留高度高的系统,留着处理后面可能会出现的高的导弹
2.坑,第一眼我的反应是每次如果后一个导弹比前一个导弹高就添加一个拦截系统,显然是错误的