动态规划——导弹问题

来源:互联网 发布:python源码剖析笔记 编辑:程序博客网 时间:2024/06/05 16:53
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:
虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,
雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.

1.请帮助计算一下最少需要多少套拦截系统.

问题分析
定义两个数组,一组用来存放各组导弹的飞行高度,另一组用来做标记所需拦截系统数目
假设共有8枚导弹,高度依次为389 207 155 300 299 170 158 65 用数组hight[x]来存放,
假设击落的最后一枚导弹是hight[1],因为hight[0]<hight[1],用一套设备即可,当击落的最后一枚导弹是
hight[3]时,hight[3]>hight[1]>hight[2];所以需要2套设备依次类推,求出所需设备数。

#include <iostream>using namespace std;int main(){    int i,j,n,num;    int hight[1000],count[1000];    while(cin>>n&&n)    {        num=0;        for(i=0; i<n; i++)        {            cin>>hight[i];            count[i]=1;        }        for(i=1; i<n; i++)            for(j=0; j<i; j++)            {                if(hight[j]<=hight[i]&&count[j]+1>count[i])                {                    count[i]=count[j]+1;                }                if(count[i]>num)                {                    num=count[i];                }            }        cout<<num<<endl;    }    return 0;}
2.若只有一套系统最多拦截几枚导弹

问题分析
定义两个数组,一组用来存放各组导弹的飞行高度,另一组用来做标记
假设共有8枚导弹,高度依次为389 207 155 300 299 170 158 65 用数组hight[x]来存放,
假设击落的最后一枚导弹是hight[1],因为hight[0]>hight[1],所以则共击落2枚导弹,
用count[1]来标记共击落的导弹数;依次类推令击落的最后一枚导弹是hight[2—7],通过比较count[0-7]找出击落导弹最多是多少

#include <iostream>
using namespace std;
int main()
{
    int i,j,n,num;
    int hight[1000],count[1000];
    while(cin>>n&&n)
    {
        num=0;
        for(i=0; i<n; i++)
        {
            cin>>hight[i];
            count[i]=1;
        }
        for(i=1; i<n; i++)
            for(j=0; j<i; j++)
            {
                if(hight[j]>=hight[i]&&count[j]+1>count[i])
                {
                    count[i]=count[j]+1;
                }
                if(count[i]>num)
                {
                    num=count[i];
                }
            }
        cout<<num<<endl;
    }
    return 0;
}




原创粉丝点击