日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通(1322:【例6.4】拦截导弹问题(Noip1999))

發(fā)布時間:2025/3/17 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通(1322:【例6.4】拦截导弹问题(Noip1999)) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1322:【例6.4】攔截導(dǎo)彈問題(Noip1999)


時間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB
提交數(shù): 14462 ??? 通過數(shù): 5606

【題目描述】

某國為了防御敵國的導(dǎo)彈襲擊,開發(fā)出一種導(dǎo)彈攔截系統(tǒng),但是這種攔截系統(tǒng)有一個缺陷:雖然它的第一發(fā)炮彈能夠到達(dá)任意的高度,但是以后每一發(fā)炮彈都不能高于前一發(fā)的高度。某天,雷達(dá)捕捉到敵國的導(dǎo)彈來襲,由于該系統(tǒng)還在試用階段。所以一套系統(tǒng)有可能不能攔截所有的導(dǎo)彈。

輸入導(dǎo)彈依次飛來的高度(雷達(dá)給出的高度不大于30000的正整數(shù))。計算要攔截所有導(dǎo)彈最小需要配備多少套這種導(dǎo)彈攔截系統(tǒng)。

【輸入】

n顆依次飛來的高度(1≤n≤1000)。

【輸出】

要攔截所有導(dǎo)彈最小配備的系統(tǒng)數(shù)k。

【輸入樣例】

389 207 155 300 299 170 158 65

【輸出樣例】

2

【提示】

輸入:導(dǎo)彈高度: 4 ?3 ?2

輸出:導(dǎo)彈攔截系統(tǒng)k=1

【分析】

? ? ? ?這道題的思路是令每套裝置的價值最大化。也就是說,避免讓一個剛攔截了300m導(dǎo)彈的裝置攔截50m的,而剛攔截60m導(dǎo)彈的裝置就可以攔截它。首先,第一發(fā)導(dǎo)彈是必須要用一套新的裝置的。而第二發(fā)就有兩種情況:比第一發(fā)高,只能再開一套;比第一發(fā)矮,使用第一套攔截。到了第i發(fā)導(dǎo)彈,就已經(jīng)有u套裝置。那么從小到大枚舉裝置能攔截的導(dǎo)彈高度,然后選擇剛好能攔截i的最小的裝置,就能最大限度減小浪費。如果所有裝置都無法攔截,那么就新開一個裝置來攔截。

感謝題解:https://www.cnblogs.com/Wild-Donkey/p/12323370.html

【參考代碼】

#include <stdio.h> #define N 1010 int l[N]; //攔截系統(tǒng) int s[N]; //導(dǎo)彈高度 int main() {int i,j,p,n=1,k=1;while(scanf("%d",&s[n])!=EOF)n++;l[k]=s[1]; //使用新的裝置攔截第一個導(dǎo)彈for(i=2;i<=n;i++) //枚舉每個導(dǎo)彈 {p=0; //標(biāo)記位,是否是可攔截的最小值 for(j=1;j<=k;j++) //枚舉用哪個裝置{if(l[j] >= s[i]) //找到能攔截的第一套裝置{if(p==0)p=j;else if(l[p] > l[j]) //貪心,更新裝置 p=j;}}if(p==0) //無法攔截 {k++; l[k]=s[i]; //增加一套新的系統(tǒng),并且放在最后 }else //貪心,更新第p套系統(tǒng)的最低高度{l[p]=s[i];}}printf("%d\n",k);return 0; }

http://ybt.ssoier.cn:8088/problem_show.php?pid=1322

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通(1322:【例6.4】拦截导弹问题(Noip1999))的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。