演算法 動態規劃 演算法題

2021-10-03 18:41:01 字數 2319 閱讀 4342

dp(動態規劃,dynamic programming).

將乙個問題拆成幾個子問題,分別求解這些子問題,即可推斷出大問題的解

概念:無後效性。(嚴格定義:如果給定某一階段的狀態,則在這一階段以後過程的發展不受這階段以前各段狀態的影響。)

最優子結構。大問題的最優解可以由小問題的最優解推出,這個性質叫做「最優子結構性質」。

能將大問題拆成幾個小問題,且滿足無後效性、最優子結構性質。

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是乙個正整數。

示例 1:

輸入: 2

輸出: 2

解釋: 有兩種方法可以爬到樓頂。

1.  1 階 + 1 階

2.  2 階

第 i 階可以由以下兩種方法得到:

在第 (i-1) 階後向上爬一階。

在第 (i-2) 階後向上爬兩階。

所以到達第 i 階的方法總數就是到第 (i-1) 階和第 (i-2) 階的方法數之和。

令 dp[i] 表示能到達第 i 階的方法總數:

dp[i]=dp[i-1]+dp[i-2]

dp[i]=dp[i−1]+dp[i−2]

int climbstairs(int n) 

return dp[n];

}

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

輸入: [1,2,3,1]

輸出: 4

解釋: 偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)。

偷竊到的最高金額 = 1 + 3 = 4 。

int rob(vector& nums) 

return dp[nums.size()];

}

給定乙個整數陣列  nums,求出陣列從索引 i 到 j  (i ≤ j) 範圍內元素的總和,包含 i,  j 兩點。

給定 nums = [-2, 0, 3, -5, 2, -1],求和函式為 sumrange()

sumrange(0, 2) -> 1

class numarray }}

int sumrange(int i, int j) else}};

乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。

問總共有多少條不同的路徑?

輸入: m = 7, n = 3

輸出: 28

典型的動態規劃題目,僅第一行或第一列路徑數只能是1,定義f(i,j) 為某點應有的路徑數,則f(i,j) = f(i - 1, j) + f(i, j - 1)。

}給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。

輸入: [10,9,2,5,3,7,101,18]

輸出: 4 

解釋: 最長的上公升子串行是 [2,3,7,101],它的長度是 4。

dp[i] = max(dp[i], dp[j] + 1); 其中,0 <= j < i, 且 nums[i] > nums[j]
int lengthoflis(vector& nums) }}

int maxval = dp[0];

for(int i = 1; i < nums.size(); i++)

return maxval;

}

演算法 動態規劃演算法

動態規劃法基本思想 將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。著名的應用例項有 求解最短路徑問題,揹包問題,專案管理,網路流優化等。個人對動態規劃的理解,主要就是避免重複計算。就是那些曾經發生過的事情,曾經計算過的值先儲存下來,然後再次遇到相同的子問題的時候,直接用儲存...

演算法 動態規劃演算法

動態規劃法基本思想 將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。著名的應用例項有 求解最短路徑問題,揹包問題,專案管理,網路流優化等。個人對動態規劃的理解,主要就是避免重複計算。就是那些曾經發生過的事情,曾經計算過的值先儲存下來,然後再次遇到相同的子問題的時候,直接用儲存...

演算法 動態規劃演算法

背 包問題 有乙個揹包,容量為 4磅 現有如下物品 物品 重量 吉他 g 1 1500 音響 s 4 3000 電腦 l 3 2000 1 要求達到的目標為裝入的揹包的總價值最大,並且重量不超出 2 要求裝入的物品不能重複 動態規劃的核心思想是把原來的問題分解成子問題進行求解,也就是分治的思想。但是...