1.1 題目介紹
62. 不同路徑
1.2 解題思路
計數型動態規劃
最後一步
最右下角的座標假設為(m,n),則假設走到(m,n)所有可能的路徑為f[m][n]
子問題
走到(m,n)的前一步有兩種可能一種是(m-1,n),一種是(m,n-1)
狀態轉移方程
f[m][n] = f[m-1][n] + f[m][n-1]
初始化和邊界
因為根據題意,只能向右走,或向下走。從(0,0)到位於(0,n)或(m,0)這點位置,都只有一種走法。
i = 0 或 j = 0 ,則f[i][j] = 0
1.3 解題**
class solution }}
return f[n-1];}}
3.1 題目介紹這裡有 d 個一樣的骰子,每個骰子上都有 f 個面,分別標號為 1, 2, ..., f。
我們約定:擲骰子的得到總點數為各骰子面朝上的數字的總和。
如果需要擲出的總點數為 target,請你計算出有多少種不同的組合情況(所有的組合情況總共有 f^d 種),模 10^9 + 7 後返回。
3.2 解題思路
該題屬於計數型動態規劃
根據題意,設dp[d][target]
是用擲d個骰子,骰子的面數f,得到和為target的方法數。
假設d=3,f=5,target = 19
(1)最後一步:
d[3][19] = d[2][19-1] + d[2][19-2] + d[2][19-3] + d[2][19-4] + d[2][19-5]
由於 d[3][19]初始化為0,所以上面的公式可以簡化為
for (i = 1;i<5;i++)
d[3][19] += d[3-1][19 - i]
(2)初始條件當只有乙個骰子時,有f個面,我們知道獲得x(1<=x<=f)的方法均為1種。
所以
for(i=1;i(3)狀態轉移方程for(i = 2;i<=d;i++)
for(j = 1;j<=target;j++)
for (k = 1;k<=f;k++)
// j>=k
dp[i][j] += d[i-1][j-k]
(4)邊界迴圈結束,i = d,j = target,即到達邊界點,也就求出解。
3.3 解題**
public int numrollstotarget(int d, int f, int target)
//骰子數
for (int i = 2; i <= d; i++) }}
}return dp[d][target];
}
佔坑,待ac。
如果字串中的所有字元都相同,那麼這個字串是單字元重複的字串。
給你乙個字串 text,你只能交換其中兩個字元一次或者什麼都不做,然後得到一些單字元重複的子串。返回其中最長的子串的長度。
輸入輸出
輸入:text = "ababa"
輸出:3
輸入:text = "aaabaaa"
輸出:6
輸入:text = "aaabbaaa"
輸出:4
輸入:text = "aaaaa"
輸出:5
輸入:text = "abcdef"
輸出:1
動態規劃入門 introduction to dynamic programming
演算法學習 動態規劃練習(一)
1.1 題目介紹 121.買賣 的最佳時機 給定乙個陣列,它的第 i 個元素是一支給定 第 i 天的 如果你最多隻允許完成一筆交易 即 和賣出一支 設計乙個演算法來計算你所能獲取的最大利潤。注意你不能在 前賣出 示例 1 輸入 7,1,5,3,6,4 輸出 5 解釋 在第 2 天 1 的時候 在第 ...
演算法學習之動態規劃(二)
神奇的口袋 有乙個神奇的口袋,總的容積為40,用這個口袋可以變出一些物品,這些物品的體積分別為a 1 a 2 a 3 a n john可以從這些物品中選擇一些,如果選出的物體的總體積為40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john有多少種不同的選擇物品的方式。遞推的...
演算法學習 動態規劃
動態規劃是解決多階段決策過程最優化的一種方法。對於離散問題,解析數學無法施展,動態規劃則成為非常有效的工具。兩個弱點 1.得出目標函式方程後,尚無統一的處理方法,必須根據具體問題的性質結合相應的數學技巧來求解 2.維數障礙。動態規劃模型的分類 根據決策過程的時間參量是離散的還是連續的變數 1.離散 ...