NOIP1999 攔截導彈
題目描述 Description
某國爲了防護敵國的導彈襲擊,發展出一種導彈攔截系統。可是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈可以到達任意的高度,可是之後每一發炮彈都不 能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲。因爲該系統還在試用階段,因此只有一套系統,所以有可能不能攔截全部的導彈。
輸入描述 Input Description
輸入導彈依次飛來的高度(雷達給出的高度數據是不大於30000的正整數)
輸出描述 Output Description
輸出這套系統最多能攔截多少導彈,若是要攔截全部導彈最少要配備多少套這種導彈攔截系統。
樣例輸入 Sample Input
389 207 155 300 299 170 158 65
樣例輸出 Sample Output
6
2
數據範圍及提示 Data Size & Hint
導彈的高度<=30000,導彈個數<=20
思路
這道題的突破口在於問題的轉化= =
先是第一問: 「最多能攔截的導彈數」。根據題目中導彈的毛病,能夠把問題轉化成經典的最長不上升子序列,動態規劃O(cnt2)完美解決;
再看第二問: 「最少須要的系統數」。順延上一問的思路,「不可能由以前已經肯定的系統攔截下來的導彈」應當添加到當前位置前的最長上升子序列中。一樣是經典問題,動態規劃O(cnt2)。
最後稍微得瑟一下→_→在沒有優化的狀況下,這段代碼在發帖前包攬了wikioi上「最快」「最短」以及「內存最少」三項指標~(好吧是由於這題太水了)