70. 爬樓梯
方法:動態規劃
演算法不難發現,這個問題可以被分解為一些包含最優子結構的子問題,即它的最優解可以從其子問題的最優解來有效地構建,我們可以使用動態規劃來解決這一問題。
第 i 階可以由以下兩種方法得到:
在第 (i−1) 階後向上爬一階。
在第 (i−2) 階後向上爬 2階。
所以到達第 ii階的方法總數就是到第 (i−1) 階和第 (i−2) 階的方法數之和。
令 dp[i]表示能到達第 i 階的方法總數:
dp[i]=dp[i-1]+dp[i-2]
int climbstairs(int n)
if(s[0]=='1'&&s[1]!='0')dp[1]=2;
else if(s[0]=='2'&&s[1]<='6'&&s[1]>'0')dp[1]=2;
else dp[1]=1;
for(int i=2;i62. 不同路徑
我們令 dp[i][j] 是到達 i, j 最多路徑
動態方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]
注意,對於第一行 dp[0][j],或者第一列 dp[i][0],由於都是在邊界,所以只能為 1
時間複雜度:o(m*n)o(m∗n)
空間複雜度:o(m * n)o(m∗n)
優化:因為我們每次只需要 dp[i-1][j],dp[i][j-1]
int uniquepaths(int m, int n)
}}return dp[m - 1][n - 1];
}
64. 最小路徑和
動態規劃題目特性
1 此類問題是乙個由多決策產生最優值的最優化問題.決策 是指在問題可以按時間順序分成若干相互聯絡的階段,每乙個階段都需要做出決策,產生最優值,整個求解過程中的決策是乙個決策序列.最優化問題 眾所周知在資訊學之中有四大類問題 判定性問題 構造性問題 計數問題和最優化問題。其中最優化問題遇到的較多,而最...
動態規劃 經典題目
made by syx time 2010年7月17日 13 58 47 矩陣連乘 最長公共子串行 最長公共子串行 include char x 8 char y 7 int b 9 8 int c 9 8 void printarray int i1,int j1,int i2,int j2,in...
題目 動態規劃(1)
題目 動態規劃 1 題目描述如下 1 8表示8個區段,紅色標出每個區段的工價,橫軸表示時間,每個時間點只能完成乙份工,請問乙個員工一天最多可以賺多少錢?注意 prev和vi為了索引i從0開始,故加入prev 0 vi 0 的初始化值 該初始化值不影響計算,只為了使索引從0開始 prev 0 0,0 ...