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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态规划之——又见拦截导弹(nyoj814)

發布時間:2025/3/16 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划之——又见拦截导弹(nyoj814) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:

又見攔截導彈

時間限制:3000?ms ?|? 內存限制:65535?KB 難度:3 描述

大家對攔截導彈那個題目應該比較熟悉了,我再敘述一下題意:某國為了防御敵國的導彈襲擊,新研制出來一種導彈攔截系統但是這種導彈攔截系統有一個缺陷它的第一發炮彈能夠到達任意的高度但是以后每一發炮彈都不能超過前一發的高度。突然有一雷達捕捉到敵國的導彈來襲。由于該系統存在缺陷,所以如果想把所有的導彈都攔截下來,就要多準備幾套這樣的導彈攔截系統。但是由于該系統成本太高,所以為了降低成本,請你計算一下最少需要多少套攔截系統。

輸入
有多組測試數據。
每組數據先輸入一個整數N(N≤3000),代表有N發導彈來襲。接下來有N個數,分別代表依次飛來的導彈的導彈的高度。當N=-1時表示輸入結束。
輸出
每組輸出數據占一行,表示最少需要多少套攔截系統。
樣例輸入
8 389 207 155 300 299 170 158 65 5 265 156 123 76 26
樣例輸出
2 1

分析:此題依然是動態規劃問題,可以用動態規劃的思想記錄下每個階段的最優解:有1個導彈來襲需要幾個裝置;有2個導彈來襲,需要幾個裝置;……有n個導彈來襲,需要幾個裝置。這樣有小到大的分析,即得最終問題的最優解。

動態規劃的解法:(40ms)

#include<stdio.h> int main() {int n,i,j,c,a[3000],dp[3000];while(1){scanf("%d",&n);if(n==-1)break;for(i=0;i<n;i++) scanf("%d",&a[i]);dp[0]=a[0]; c=1; for(i=1;i<n;i++){for(j=0;j<c;j++)if(a[i]<=dp[j]){dp[j]=a[i];break;}if(j>=c){dp[j]=a[i]; c++;}}printf("%d\n",c);}return 0; }


普通解法:對n個 導彈進行多次遍歷,每次找一個最小值,按最小值找一個最長非遞減序列,全部處理,每處理一個n--,表示還有n個未處理;每對這n個導彈遍歷一遍需要的裝置個數cnt++;

#include <stdio.h> int main() {int n,s[3005]={0};while(scanf("%d", &n)&&n !=-1){for(int i=0; i<n; i++)scanf("%d", &s[i]);int cnt=0, k=n,pre;while(k){pre=0;for(int i=n-1; i>=0; i--){if(s[i]>=pre){pre = s[i];s[i] = -1;k--;}}cnt++;}printf("%d\n", cnt);}return 0; }
題目鏈接:http://acm.nyist.net/JudgeOnline/problem.php?pid=814

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的动态规划之——又见拦截导弹(nyoj814)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。