刷題93 動態規劃(十)

2021-10-05 17:22:18 字數 1525 閱讀 2546

題目鏈結題目描述

三步問題。有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階、2階或3階。實現一種方法,計算小孩有多少種上樓梯的方式。結果可能很大,你需要對結果模1000000007。

示例1:

輸入:n = 3

輸出:4

說明: 有四種走法

示例2:

n範圍在[1, 1000000]之間

題目分析

定義dp[i]:代表第i階台階的走法;

從4階台階開始,最後一此走法分別有三種:1階、2階或3階;

因此,狀態轉移方程:dp[i] = dp[i-1]+dp[i-2]+dp[i-3];

對結果模1000000007。

/**

* @param n

* @return

*/var

waystostep

=function

(n)return dp[n];}

;

刷題90—動態規劃(七):剪繩子

題目鏈結題目描述

給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段(m、n都是整數,n>1並且m>1),每段繩子的長度記為 k[0],k[1]…k[m] 。請問 k[0]k[1]…*k[m] 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。

答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。

示例 1:

輸入: 2

輸出: 1

解釋: 2 = 1 + 1, 1 × 1 = 1

示例 2:

輸入: 10

輸出: 36

解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

2 <= n <= 1000

題目分析

這個題和 剪繩子 一樣的描述,就是資料範圍變大了;

在切分繩子的時候,最後一步可以切分成2或3,切分成3後的乘積更大;

因此狀態轉移方程:dp[i]=dp[i-3]*3;

對結果模1000000007。

法一:動態規劃

/**

* @param n

* @return

*/var

cuttingrope

=function

(n)return dp[n];}

;

法二:

/**

* @param n

* @return

*/var

cuttingrope

=function

(n)return res * n %

1000000007;}

;

刷題 動態規劃

動態規劃法 動態規劃求解問題的四個特徵 求乙個問題的最優解 整體的問題的最優解是依賴於各個子問題的最優解 小問題之間還有相互重疊的更小的子問題 從上往下分析問題,從下往上求解問題 題目 給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k ...

動態規劃刷題總結

資料結構與演算法 41 動態規劃理論 最優子結構 無後效性和重複子問題 zj csdn部落格 乙個模型 多階段決策最優解模型,重點在於多階段,每個階段都對應著不同的狀態 三個特徵 最優子結構,無後效性,重複子問題。主要抓住最優子結構這一特徵,理解為後面的階段狀態可以由前面的階段狀態推導而來。狀態定義...

leetcode刷題 動態規劃

動態規劃 英語 dynamic programming,簡稱 dp 是一種在數學 管理科學 電腦科學 經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。動態規劃背後的基...