題目鏈結題目描述
三步問題。有個小孩正在上樓梯,樓梯有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 是一種在數學 管理科學 電腦科學 經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。動態規劃背後的基...