http://acm.hdu.edu.cn/showproblem.php?pid=1257
此题只需进行多次循环将所有以递减的数列找全即可解答。
技巧:可设置一个判断的值来判断该高度是否一辈拦截,进而可以防止已经被拦截的高度再次被纳入判断范围。
//贪心
#include <iostream>
#include <cstdio>
using namespace std;
struct node
{
int high;
bool decide;//判断该高度是否没有被拦截
};
int main()
{
int n;
node th[10005];
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d",&th[i].high);
th[i].decide=true; //默认该高度未被拦截
}
int t=n,num=0;
while(t)//拦截到的导弹减去,直至所有导弹被拦截循环截至
{
num++;
int max=99999;
for(int i=0;i<n;i++)
{
if(th[i].decide&&th[i].high<max)
{
th[i].decide=false;
max=th[i].high;
t--;
}
}
}
printf("%d\n",num);
}
return 0;
}