演算法學習 動態規劃練習(二)

2022-02-06 15:07:41 字數 2178 閱讀 3869

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.離散 ...