最少拦截系统
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
贪心 思路:先把第一个拦截系统高度初始化为第一个飞来的导弹的高度,然后让下一个导弹与所有拦截系统比较过去,情况如下
从第一个拦截系统开始比较,
①若第 i 个导弹高度低于第 j 个拦截系统的高度,则将第 j 个拦截系统高度更新为第 i 个导弹的高度;
②若第 i 个导弹高度比所有拦截系统的高度都高,则在加入一个拦截系统,该拦截系统高度就是第 i 个导弹的高度;
(这道题有说贪心又说动态规划,动态规划我是真理解不了,这个还好)
#include<stdio.h>
int d[100001],s[100001];
int main()
{
int n,i,j;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&d[i]);
int k=0;
s[0]=d[0];
for(i=1;i<n;i++) //第i个导弹,从第一个拦截系统开始,依次与所有拦截系统比较,
{
int flag=0;
for(j=0;j<=k;j++) // (接上一行注释)直到有拦截系统高度大于导弹高度,
{
if(s[j]>=d[i])
{
s[j]=d[i];
flag=1;
break;
}
}
if(flag!=1)
{ //若第i个导弹高度高于所有拦截系统高度,则在加入一个拦截系统,
k++; //(接上一行注释)该拦截系统高度就是第 i 个导弹的高度;
s[k]=d[i];
}
}
printf("%d\n",k+1);
}
return 0;
}