小白的進擊路(一)動態規劃(1)

2021-09-13 12:57:11 字數 1311 閱讀 7371

------貪心總結(3)

1)最近做題,有些題起初看起來是需要設計模擬過程,但通過結果和過程關係,

其實是只需對已知案例貪心就能得到結果。也就是不需要模擬過程,只是尋找

最短路徑,也是貪心的策略。在csdn也看到貪心是初始解逐步逼近給定目標的

演算法,是乙個思想。

2)貪心中結構體清零可以使用memset

例:memset(buffer,0,sizeof(buffer));

//雖然結構體一般在已知元素個數情況下不需要清零吧

標頭檔案3)設計**時應多採用功能函式,能更好除錯。

------動態規劃

1、之前開學時,oj上看到乙個題:《攔截飛彈》,看了好久也沒思路,在csdn上找的需要動態規劃就以這個題簡單認識一下動態規劃。

描述某國為了防禦敵國的飛彈襲擊,開發出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷

:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。

某天,雷達捕捉到敵國的飛彈來襲,並觀測到飛彈依次飛來的高度,請計算這套系統最多能攔截多少飛彈。

攔截來襲飛彈時,必須按來襲飛彈襲擊的時間順序,不允許先攔截後面的飛彈,再攔截前面的飛彈。

輸入輸入有兩行,

第一行,輸入雷達捕捉到的敵國飛彈的數量k(k<=25),

第二行,輸入k個正整數,表示k枚飛彈的高度,按來襲飛彈的襲擊時間順序給出,以空格分隔。

輸出輸出只有一行,包含乙個整數,表示最多能攔截多少枚飛彈。

樣例輸入

8300 207 155 300 299 170 158 65

樣例輸出

6從後往前依次為終點,計算可攔截個數,如果左邊大於右邊則加一,左邊大於多個右邊,則取可攔截個數最大

300 207 155 300 299 170 158 65

(6) (4) (3) (5) (4) (3) (2) (1)

2、動態規劃思路

遞迴到動歸轉化,定義n維陣列,下標是遞迴函式引數取值範圍,陣列元素值是遞迴返回值,從邊界值開始,逐步填充陣列。

1)將原問題分解為子問題

原問題分解為若干個子問題,子問題與原問題形式相同或類似

子問題求解一旦求出就會被儲存

2)確定狀態:子問題相關變數的一組取值,同時也是子問題的解。

3)確定初始狀態(邊界值)

4)遞推轉移:子問題解(狀態轉移)

3、再議飛彈攔截問題

1)將求最高攔截分解為每個為終點時去攔截

2)每個資料為終點時可攔截數,即為狀態

3)從最後乙個資料可攔截數(邊界值)

4)左邊大於右邊則加一,大於多個則取最大加一(狀態轉移)

演算法之一動態規劃

問題描述 給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?對於一種物品,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1.我們設物品i的裝入狀態為xi,xi 0,1 此問題稱為0 11揹包問題。資料 物...

跳躍遊戲一(動態規劃)

給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。請確認你是否能夠跳躍到陣列的最後乙個下標。例如 a 2,3,1,1,4 a 2,3 1,1 4 能夠跳躍到最後乙個下標,輸出true a 3,2,1,0,4 a 3,2 1,0 4 不能跳躍到...

面試準備(一) 動態規劃

動態規劃的思路說起來很簡單,但是新遇到乙個題目往往就會卡殼,甚至出現解不出來的情況。因此學習的過程中,有必要對面試準備中涉及到的動態規劃題目記錄,這裡只談思路,不涉及具體實現。通過分析不僅可以總結思路,更重要的是能從這些問題中找出動態規劃題目求解的共性,希望徹底搞定動態規劃!動態規劃常用來解決優化問...