1302 飛彈攔截

來源:互聯網
上載者:User
 
描述

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮 彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。

輸入

本題有多組測試資料。輸入的第一行為飛彈的個數,最多10000。接下來每行為飛彈依次飛來的高度(不大於30000 的正整數)

以0結尾(不做處理)

輸出

對每組輸入資料,輸出一行,為最多攔截的飛彈個數。

範例輸入6
5 3 2 4 1 3
3
3 3 3
0範例輸出

4
3

解題思路:
此題其實是一道動態規劃題。可以從後往前推,記錄在每一個位置處發射飛彈後面最多能攔截多少飛彈的個數。這樣找出一個最大的數即可。此題其實也可以從前往後推,高人們可以試試。

#include <stdio.h>main(){int number,te;int a[10001];int b[10001];int i,j;int t;int max;scanf("%d",&number);while(number!=0){ for(te=1;te<=number;te++)scanf("%d",&a[te]);for(te=1;te<=number;te++)b[te]=1;         for(i=number-1;i>0;i--){t=0;for(j=number;j>i;j--){if(a[i]>=a[j]&&(b[j]+b[i])>t){t=b[j]+b[i];   continue;}}           if(t>=1)  b[i]=t;   else   continue;}         max=0;for(i=1;i<=number;i++){ if(max<b[i])max=b[i];}printf("%d\n",max);scanf("%d",&number);}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.