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