防卫导弹

防卫导弹

时限:1000ms 内存限制:10000K  总时限:3000ms

描述

一种新型的防卫导弹可截击多个攻击导弹。它可以向前飞行,也可以用很快的速度向下飞行,可以毫无损伤地截击进攻导弹,但不可以向后或向上飞行。但有一个缺点,尽管它发射时可以达到任意高度,但它只能截击比它上次截击导弹时所处高度低或者高度相同的导弹。现对这种新型防卫导弹进行测试,在每一次测试中,发射一系列的测试导弹(这些导弹发射的间隔时间固定,飞行速度相同),该防卫导弹所能获得的信息包括各进攻导弹的高度,以及它们发射次序。现要求编一程序,求在每次测试中,该防卫导弹最多能截击的进攻导弹数量,一个导弹能被截击应满足下列两个条件之一:
a)它是该次测试中第一个被防卫导弹截击的导弹;
b)它是在上一次被截击导弹的发射后发射,且高度不大于上一次被截击导弹的高度的导弹。

输入

多个测例。
每个测例第一行是一个整数n(n不超过100),第二行n个整数表示导弹的高度(数字的顺序即发射的顺序)。
n=0表示输入结束。

输出

每个测例在单独的一行内输出截击导弹的最大数目。

输入样例

5
5 6 100 6 61
0

输出样例

2

#include <iostream>

using namespace std;

void FindPlan(int* data,int num)
{
    int* count = new int[num];
    for(int i = 0;i < num; i++)
        count[i] = 0;
    int maxi;
	/*if(num>=2&&data[num-1]<=data[num-2])
		count[num-1] = 1;*/
	count[num-1] = 1;									//若击落最后一个导弹则只能击中一个
    for(i = num-2;i >= 0; i--)							//从倒数第二枚导弹开始计数,若从第i枚导弹并开始打击(包含第i枚)能打击多少枚导弹
    {
        maxi = 0;
        for(int j = i+1;j < num; j++)
        if(data[j]<=data[i]&&count[j]>maxi)
            maxi = count[j];
        count[i] = maxi+1;

		/*cout<<i<<endl;
		for(int k = 0;k < num; k++)
			cout<<count[k]<<" ";
		cout<<endl;*/

    }
    int max = 0;

	/*for(i = 0;i < num; i++)
		cout<<count[i]<<" ";
	cout<<endl;*/

    for(i = 0;i < num; i++)
        if(count[i]>max)
            max = count[i];
    cout<<max<<endl;
	free(count);
}

int main()
{
    int num;
    int *data;
    cin>>num;
	while(num!=0)
	{
		data = new int[num];
		for(int i = 0;i < num; i++)
			cin>>data[i];
		FindPlan(data,num);
		free(data);
		cin>>num;
	}

    return 0;
}

  

时间: 2024-08-27 21:56:09

防卫导弹的相关文章

动态规划之防卫导弹

/* 防卫导弹 一种新型的防卫导弹可截击多个攻击导弹.它可以向前飞行,也可以用很快的速度向下飞行,可以毫无损伤地 * 截击进攻导弹,但不可以向后或向上飞行.但有一个缺点,尽管它发射时可以达到任意高度, * 但它只能截击比它上次截击导弹时所处高度低或者高度相同的导弹.现对这种新型防卫导弹进行 * 测试,在每一次测试中,发射一系列的测试导弹(这些导弹发射的间隔时间固定,飞行速度相同), * 该防卫导弹所能获得的信息包括各进攻导弹的高度,以及它们发射次序.现要求编一程序,求在 * 每次测试中,该防卫导

聪明人的游戏,初中版 之目录

第一章算法概述    第1课 算法的概念    第2课 结构化程序设计思想    第3课 算法的时空复杂度 第二章字符串处理与进制转换    第1课 贝贝的交通指挥系统    第2课 贝贝的图形    第3课 贝贝的加密工作    第4课 贝贝的保险库密码    第5课 贝贝的数学课    第6课 贝贝与外星人    本章知识归纳    本章综合练习 第三章枚举算法    第1课 桐桐的计算    第2课 桐桐的数学难题    第3课 素数的秘密    第4课 桐桐的思考    第5课 桐桐的研

牛人的ACM经验 (转)

一:知识点 数据结构: 1,单,双链表及循环链表 2,树的表示与存储,二叉树(概念,遍历)二叉树的 应用(二叉排序树,判定树,博弈树,解答树等) 3,文件操作(从文本文件中读入数据并输出到文本文 件中) 4,图(基本概念,存储结构,图的运算) 数学知识 1,离散数学知识的应用(如排列组合.简单的图论,数 理逻辑) 2,数论知识 3,线性代数 4,组合代数 5,计算几何 二 算法 1,排序算法(冒抛法,插入排序,合并排序,快速排 序,堆排序) 2,查找(顺序查找,二分发) 3,回溯算法 4,递归算

导弹拦截

题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统. 输入输出格式 输入格式: 一行,若干个正整数最多100个. 输

1048: 导弹防御系统

1048: 导弹防御系统 时间限制: 1 Sec  内存限制: 128 MB提交: 836  解决: 349[提交][状态][讨论版] 题目描述 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹.拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹. 输入

nyoj 814 又见拦截导弹

又见拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.突然有一天,雷达捕捉到敌国的导弹来袭.由于该系统存在缺陷,所以如果想把所有的导弹都拦截下来,就要多准备几套这样的导弹拦截系统.但是由于该系统成本太高,所以为了降低成本,请你计算一下最少需要

3:拦截导弹

题目链接:http://cxsjsxmooc.openjudge.cn/2017t2summerw5/3/ 总时间限制: 1000ms 内存限制: 65536kB 描述 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹.拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再

codevs 1128 导弹拦截

题目描述 Description 经过11 年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0 时,则能够拦截与它位置恰好相同的导弹.但该导弹拦截系统也存在这样的缺陷:每套系统每天只能设定一次工作半径.而当天的使用代价,就是所有系统工作半径的平方和.某天,雷达捕捉到敌国的导弹来袭.由于该系统尚处于试验阶段,所以只有两套系统投入工作.如果现在的要求是拦截所有的导弹,请计算这一天的最小使用代价. 数据范围对于10%的数据,N = 1

codevs 1044 拦截导弹 1999年NOIP全国联赛提高组

1044 拦截导弹 1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 输入描述 Input Description 输入导弹