動態規劃問題系列 word break問題

2021-07-22 15:56:21 字數 1294 閱讀 2983

給定乙個字串和乙個字典,在字串中新增空格來構造乙個句子,使句子中的每個單詞在字典中都存在;

輸入 :字串

輸出:所有可能的句子

例如:

s=」catsanddog」

dict=[「cat」,」cats」,」and』,」sand」,」dog」]

輸出:cats and dog和cat sand dog

將字串分割成2部分s1和s2,如果s1包含在字典中,則遞迴計算s2;然後合併s1和s2分割的結果;

s2可能無法分割,則返回乙個」「;

動態規劃方法:

狀態轉移方程:

* f(i) 表示s[0,i]是否可以分詞

* f(i) = f(j) && f(j+1,i); 0 <= j < i;

words dict,

* determine if s can be segmented into a space-separated sequence of

* one or more dictonary words.

* * sucha as:

* s=leetcode

* dict=[leet,code]

* return

true

*/public static boolean wordbreak(string s, setdict)

boolean dp=new boolean[s.length()+1];

dp[0]=true;

for(int i=0;i<=s.length();i++)

}

}return dp[s.length()];

}

private static arraylistwordbreak_2(string s,setdict) 

for(int i=1;i<=s.length();i++)else}}

}return list;

}

上述遞迴實現===超時

加入map,記錄字串對應的結果

private static arraylistwordbreak_2(string s,setdict,hashmap> map) 

arraylistlist=new arraylist();

if(s.length()==0)

for(int i=1;i<=s.length();i++)else}}

}map.put(s, list);

return list;

}

動態規劃問題系列 Disk Schedule

有很多從磁碟讀取資料的需求,包括順序讀取 隨機讀取。為了提高效率,需要人為安排磁碟讀取。然而,在現實中,這種做法很複雜。我們考慮乙個相對簡單的場景。磁碟有許多軌道,每個軌道有許多扇區,用於儲存資料。當我們想在特定扇區來讀取資料時,磁頭需要跳轉到特定的軌道 具體扇區進行讀取操作。為了簡單,我們假設磁頭...

動態規劃系列

有n件物品和乙個容量為 v的揹包,放入第i件物品的空間消耗是ci 得到的價值是wi 求解將哪些物品裝入揹包可使價值總和最大。基本思路 定義子問題 f i j 表示將前i個物品放入容量為j的揹包中。求解時只需考慮第i個物品放入或者不放入兩種可能 則有狀態轉移方程 f i j max else dp i...

整數劃分系列問題(動態規劃)

今天上演算法分析與設計課時,提到整數劃分問題,但是因為之前沒有很好地理解這一系列的問題。當被老師問到你們做演算法的應該會這個問題吧,我當時也不太記得,但是只能硬頭皮試著去寫了下,用的是brute force,老師果斷說我的方法跑不出正確的解,但是課堂上我也沒有去解釋了。課後自己驗證了一下,沒有問題,...