在leetcode上看題解與結合自己的想法得出思路。
首先明確 dp 陣列所存資料的含義。這步很重要,如果不得當或者不夠清晰,會阻礙之後的步驟。
然後根據 dp 陣列的定義,假設 dp[0…i-1]dp[0…i−1] 都已知,想辦法求出 dp[i]dp[i],一旦這一步完成,整個題目基本就解決了。
但如果無法完成這一步,很可能就是 dp 陣列的定義不夠恰當,需要重新定義 dp 陣列的含義;或者可能是 dp 陣列儲存的資訊還不夠,不足以推出下一步的答案,需要把 dp 陣列擴大成二維陣列甚至三維陣列。
最後想一想問題的 base case 是什麼,以此來初始化 dp 陣列,以保證演算法正確執行。
動態規劃解題思路
一直以來,對動態規劃的理解處於乙個模糊的狀態,就是一種似乎懂但遇到問題未必能行的狀態 然後,最近重點在leetcode上找了一些動態規劃的題目做了一下,逐漸有了一些思路。我覺得leetcode上對動態規劃思想的概括非常到位,所以記錄在這裡 動態規劃 英語 dynamic programming,簡稱...
動態規劃解題一般思路
摘自mooc的程式設計與演算法 一.遞迴到動規的轉換方法 遞迴函式有n個引數,就定義乙個n維的陣列,陣列的下標就是遞迴函式引數的取值範圍,陣列元素的值就是遞迴的返回值,這樣就可以從邊界值開始逐步填充陣列,相當於計算遞迴函式值的逆過程 二.動態規劃解題一般思路 1.將原問題分解成子問題 把原問題分解成...
動態規劃解題的一般思路
遞迴到動規的一般轉化方法 遞迴函式有n個引數,就定義乙個n維的陣列,陣列的下表是遞迴函式引數的取值範圍,陣列元素的值是遞迴函式的返回值,這樣就可以從邊界值開始,逐步填充陣列,相當於計算遞迴函式值的逆過程 動規解題的一般思路 1.將原問題分解為子問題 把原問題分解為若干個子問題,子問題和原問題形式相同...