导弹拦截

导弹拦截(一)
难度级别:A;            运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000 的正整数),计算这套系统最多能拦截多少导弹?该导弹数量不超过100个。
输入
一行有若干个整数,表示依次飞来导弹的高度。两数之间用一个空格分隔。
输出
一个数,表示该系统最多能拦截的导弹。
输入示例
389 207 155 300 299 170 158 65
输出示例
6
其他说明
数据范围见题目中的描述。

 

#include<iostream> 
using namespace std; 
int h[101],a[101]; 
int main() 
{    
    int i,j,n=0,ans=0,maxx;
    while(cin>>h[n]) 
    {
        n++;
    }
    a[1]=1;
    for(i=0;i<n;i++) 
    { 
        maxx=1; 
        for(j=0;j<=i;j++)
        { 
            if(h[i]<h[j]&&a[j]+1>maxx)
                maxx=a[j]+1; 
            a[i]=maxx; 
        } 
        if(a[i]>=ans) 
            ans=a[i]; 
    } 
    cout<<ans;
    //system("pause");
    return 0;
}

  拟一个表格389 207 155 300 299 170 158 65
                1     2     3    2     3     4     5    6

导弹拦截(二)
难度级别:B;            运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述
 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000 的正整数),该导弹数量不超过100个,计算这套系统最多能拦截多少导弹,分别是哪些导弹,本题保证所给的数据最优解只有一组。
输入
一行有若干个整数,表示依次飞来导弹的高度。两数之间用一个空格分隔。
输出
第一行包含一个数表示最多能拦截的导弹数,第二行有若干个数,表示依次拦截到的导弹高度,两两之间用一个空格分隔。
输入示例
389 207 155 300 299 170 158 65
输出示例
6 389 300 299 170 158 65
其他说明
数据范围见题目描述。

 

#include<iostream> 
using namespace std; 
int h[101],a[101],b[101],k[101]; 
int main() 
{    
    int i,j,n=2,ans=0,maxx,hh=0;
    int num=0;
    while(cin>>h[n]) 
    {
        n++;
    }
    n--;
    a[1]=1;
    for(i=2;i<=n;i++) 
    { 
        maxx=1; 
        for(j=1;j<i;j++)
        { 
            if(h[i]<h[j]&&a[j]+1>maxx)
            {
                maxx=a[j]+1;
                b[i]=j;
            }
            a[i]=maxx; 
        } 
        if(a[i]>=ans)
        { 
            ans=a[i]; 
            num=i;
        }
    }
    cout<<ans<<endl;
    for(i=num;i>=1;)
    {
        k[hh]=h[i];
        hh++;
        i=b[i];
    }
    for(i=hh-1;i>0;i--)
    {
        cout<<k[i]<<" ";
    }
    cout<<h[num];
    //system("pause");
    return 0;
}
导弹拦截(三)
难度级别:C;            运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000 的正整数),该导弹数量不超过100个计算这套系统最多能拦截多少导弹,和如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入
一行有若干个整数,表示依次飞来导弹的高度。两数之间用一个空格分隔。
输出
第一行一个数表示最多能拦截的导弹数 第二行一个数表示要拦截所有导弹最少要配备的系统数
输入示例
389 207 155 300 299 170 158 65
输出示例
6 2
其他说明
数据范围见题目中的描述。

 

#include<iostream> 
using namespace std; 
int h[101],a[101]; 
int main() 
{    
    int i,j,n=0,ans=0,maxx;
    while(cin>>h[n]) 
    {
        n++;
    }
    a[1]=1;
    for(i=0;i<n;i++) 
    { 
        maxx=1; 
        for(j=0;j<=i;j++)
        { 
            if(h[i]<h[j]&&a[j]+1>maxx)
                maxx=a[j]+1; 
            a[i]=maxx; 
        } 
        if(a[i]>=ans) 
            ans=a[i]; 
    } 
    cout<<ans;
    int ans1=1;
    for(i=1;i<=n;i++)
    {
        if(h[i]<h[i-1])
        {
            continue;
        }
        else
            ans1++;
    }
    cout<<endl<<ans1;
    //system("pause");
    return 0;
}

 

posted @ 2017-03-18 11:00  Bruce--Wang  阅读(327)  评论(0编辑  收藏  举报