回 帖 发 新 帖 刷新版面

主题:TJU1004 防御导弹的问题

Problem
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在使用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

Input
最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)

Output
两个整数M和N。表示:这套系统最多能拦截 M 枚导弹,如果要拦截所有导弹最少要配备 N 套这种导弹系统。

小弟刚刚开始编程上路. 对这DP的经典题目很感兴趣.
下面是网上一朋友给我他自己的程序, 但还是没看懂里面的东西.
谁能给我讲讲程序中定义的3个数组分别在程序中有什么作用.还有这程序运行的大概过程.


程序清单
  #include <stdio.h>

int main(int argc, char *argv[])
{
    int a[20],b[20],h[20];
    int n=0;
    int m=0,k=0;
    while(scanf("%d",&a[n])==1)
    {
        b[n]=0;
        int i=0;
        for(;i<n;i++)
        {
            if(a[i]>a[n]&&b[i]>b[n])
                b[n]=b[i];
        }
        b[n]++;
        if(b[n]>m)
            m=b[n];
        int flag=0;
        int j=0;
        for(;j<k;j++)
        {
            if(h[j]>a[n])
            {
                h[j]=a[n];
                flag=1;
                break;
            }
        }
        if(flag==0)
        {
            k++;
            h[j]=a[n];
        }
        n++;
    }
    printf("%d %d\n",m,k);
    return 0;
}

回复列表 (共1个回复)

沙发

为什么现在TJU进不了啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册