最少拦截系统

来源:互联网 发布:stm32数据寄存器 编辑:程序博客网 时间:2024/06/04 19:44

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1257

思路: 采用贪心的做法,每次都选择最接近导弹的高度。

#include <iostream>#include<string.h>using namespace std;int check(int len_min[], int sum, int n)  //现有导弹系统,及要打到打距离/{    int locat=0;    int _min = 50000;    bool bl = false;    for(int i = 0; i<sum; i++)    {        if(len_min[i]-n>=0 && len_min[i]-n<=_min)        {            _min = len_min[i]-n;            locat = i;            bl = true;        }    }    if(bl)        return locat;//返回要使用打系统编号。    else return -1;//没有返回-1增加一个系统/}int main(){    int N;    while(cin>>N)    {        int high[100000];        int i,len_min[100000],sum = 0,t;        memset(len_min,0,sizeof(len_min));        for(i = 0; i<N; i++)            cin>>high[i];        for(i = 0; i<N; i++)        {   t = check(len_min, sum, high[i]);            //  cout<<t<<"  ";            if(t == -1)            {                len_min[sum] = high[i];                sum ++;            }            else            len_min[t] = high[i];        }        cout<<sum<<endl;    }    return 0;}