def
bfs(arr, ajmatrix)
: max_length =
0for i in
range
(len
(arr)):
# 每乙個單詞都有可能被當作開頭
# 記錄遍歷過的單詞
history =
# 以第i個單詞作為開頭
cur_max =
0#初始化以第i個單詞為開頭的最大長度
queue=
(i,len
(arr[i]
),history)
)# (字串索引,字串長度,當前路徑的history)入棧
while queue:
# 當空的時候說明以第i個單詞為開頭的所有路徑都已經遍歷完了
cur_id, cur_len, cur_history = queue.pop(0)
ifnot ajmatrix[cur_id]
:# 該路徑走到了結尾,則更新cur_max
cur_max =
max(cur_max, cur_len)
else
:for index in ajmatrix[cur_id]
:if index not
in cur_history:
# 當前節點 和 到該節點為止的長度 和 到該節點為止的history 入棧
(index, cur_len +
len(arr[index]
), cur_history +
[index]))
else
:# 如果index已經存在於history中了,相當於一條路徑結束,因此直接更新cur_max
cur_max =
max(cur_max, cur_len)
# 更新max_length
max_length =
max(max_length , cur_max)
return max_length
動態規劃 最長上公升字串問題
首先定義上公升字串,對於任意的0這道題首先想到利用動態規劃的思路,動態規劃的基本思想就是 問題的最優解如果可以由子問題的最優解推導得到,則可以先求解子問題的最優解,在構造原問題的最優解 若子問題有較多的重複出現,則可以自底向上從最終子問題向原問題逐步求解。因此這道題可以理解成兩個問題 在已知前n 1...
動態規劃 最長上公升子串行
問題描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等...
動態規劃 最長上公升子串行
動態規劃 儲存遞迴中間結果,減少遞迴次數 總時間限制 2000ms 記憶體限制 65536kb 描述 乙個數的序列 bi,當 b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2 an 我們可以得到一些上公升的子串行 ai1,ai2 aik 這裡1 i1 i2 ik n。...