Day9 - H - 最少拦截系统 HDU - 1257

天大地大妈咪最大 提交于 2020-01-30 22:11:56
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.

Input输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)
Output对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统.
Sample Input

8 389 207 155 300 299 170 158 65

Sample Output

2思路:简单的贪心即可,有一个不满足条件就增加一个装置,每次都扫描已经增加的装置
const int maxm = 3e5+5;

int val, n, build[maxm], cnt;

void run_case() {
    cnt = 0;
    cin >> val;
    build[cnt++] = val;
    for(int i = 1; i < n; ++i) {
        cin >> val;
        bool flag = true;
        for(int j = 0; j < cnt && flag; ++j)
            if(val<build[j]) {
                build[j] = val;
                flag = false;
            }
        if(flag)
            build[cnt++] = val;
    }
    cout << cnt << "\n";
        
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    while(cin >> n)
        run_case();
    return 0;
}
View Code

 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!