典型的動態規劃題目總結(斐波那契數列相關)

2022-04-11 15:47:47 字數 2543 閱讀 7448

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。

大體思路:

第 i 個樓梯可以從第 i-1 和 i-2 個樓梯再走一步到達,即走到第 i 個樓梯的方法數為走到第 i-1 和第 i-2 個樓梯的方法數之和。所以可以推導出遞推公式為:dp[i]=dp[i-1]+dp[i-2]

考慮到 dp[i] 只與 dp[i - 1] 和 dp[i - 2] 有關,因此可以只用兩個變數來儲存 dp[i - 1] 和 dp[i - 2],使得原來的 o(n) 空間複雜度優化為 o(1) 複雜度。具體非遞迴**如下:

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

大致思路:

(1)每乙個高度的台階都可以一步完成,所以每乙個位置都有一種基本解 dp[i]=1

(2)除了基本解之外,每乙個高度的完成解還受到且僅受到前乙個相鄰高度dp[i-1]的影響。

(3)因此,每乙個高度的最終解都是前乙個數的解()+本身的基本解。即,dp[i]=1+dp[i-1];

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

大體思路:

(1)相鄰的房間不可以偷==》偷了i就不可以偷i-1.

(2)那麼假如i為一排房間的最後一間,那麼走過當前i個房間的最大值為:

dp[i]=max(dp[i-2]+numms[i],dp[i-1]);

因此,也需要兩個值dp[i-1],dp[i-2]。

class

solution

return

pre1;}}

你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

解題思路:

/**(1)先考慮直線型的情況,當一共有i個房間時,偷了i,就不能再偷i-1.只能偷i-2.

所以 dp[i]=math.max(nums[i]+dp[i-2],dp[i-1]);

(2)環形道的話,可以在直線型的基礎上進行考慮,因為第一和最後乙個變成了相鄰,所以

偷了第乙個就不能偷最後乙個了。

從第二個開始偷,才可以偷最後乙個。

因此,可以從這兩種路徑中選乙個最大的作為最終的結果值。

**/

class

solution

//環形解

int fromone=maxval(nums,0,nums.length-2);

int fromtwo=maxval(nums,1,nums.length-1);

return

math.max(fromone,fromtwo);

}//直線型解

private

int maxval(intnums,int start,int

end)

return

pre1;}}

假設農場中成熟的母牛每年都會生 1 頭小母牛,並且永遠不會死。第一年有 1 只小母牛,從第二年開始,母牛開始生小母牛。每只小母牛 3 年之後成熟又可以生小母牛。給定整數 n,求 n 年後牛的數量。

思路:(1)在前三年,只有母牛才可以生產。

(2)因為所有的牛都不會死,因此,第n-1年的所有牛dp[n-1]都會活到第n年。

(3)   因為成熟的母牛每年都會生 1 頭小母牛。因此,第n-3年中的所有牛到第n年都會新增乙個小母牛。dp[n-3]。

n 年後牛的總數量為:一直的大母牛dp[n-1]+新增的小母牛dp[n-3]。

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

思路類似於常規跳台階。

動態規劃 斐波那契數列

問 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 斐波那契數列簡單介紹 我的解法 注 從fibonacci n 1 fibonacci n 2 明顯看出使用的是遞迴,此題用遞迴兩三行 即可搞定。但是,若出題者準備著乙個超大的n,那麼很有...

python斐波那契數列動態規劃

斐波那契類似於1 1 2 3 5 8這樣的數列,當前項等於前兩項之和。根據這個規律就可以用遞迴來做,可是當數字很大的時候,遞迴耗時很長,因此可以採用動態規劃來做。動態規劃 deffeibonacci1 n array 0 1 while len array n 1 array 2 return ar...

動態規劃之斐波那契數

70.爬樓梯 e 假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。第n階台階的路線等於n 1階的路線數加上n 2階的路線數,第一階的路線數為1,第二階路線數等於2,遍歷求和即可 class soluti...