python?動態(tài)規(guī)劃問題解析(背包問題和最長公共子串)
背包問題
現(xiàn)在要往一個可以裝4個單位重量的背包里怎么裝價值最高:A重量1個單位,價值15;B重量3個單位,價值20;C重量4個重量,價值30
使用動態(tài)規(guī)劃填充空格

class SolutionBag:
def valuableBag(self,optionalList,sizeBig):
#創(chuàng)建網(wǎng)格
grid = [[0 for i in range(sizeBig+1)] for j in range(len(optionalList)+1)]
#從行列序號1開始計數(shù)
column = 1
for v in optionalList.values():
optionalWeight,optionalPrice = v
for row in range(sizeBig):
if optionalWeight > row+1:
grid[column][row+1] = grid[column-1][row+1]
else:
grid[column][row+1] = max(grid[column-1][row+1],optionalPrice+grid[column-1][row+1-optionalWeight])
column += 1
return grid#SolutionBag().valuableBag({"A":(1,15),"B":(3,20),"C":(4,30)},4)最長公共子串
在動態(tài)規(guī)劃中,你要將某個指標最大化。在這個例子中,你要找出兩個單詞的最長公共子串。fish和fosh都包含的最長子串是什么呢
如何將這個問題劃分為子問題呢?你可能需要比較子串:不是比較hish和fish,而是先比較his和fis
我們網(wǎng)格填充的方法來實現(xiàn)

#偽代碼
#字母相同則左上方+1
if word1[i] == word2[j] :
cell[i][j] = cell[i-1][j-1] +1
else:
cell[i][j] = max(cell[i][j-1],cell[i-1][j])python實現(xiàn)網(wǎng)格
class SolutionLengthS:
def longestLength(self,str1,str2):
grid = [[0 for j in range(len(str2)+1)] for i in range(len(str1)+1)]
for i in range(len(str2)):
for j in range(len(str1)):
if str1[j] == str2[i] :
grid[i+1][j+1] = grid[i][j] + 1
else:
grid[i+1][j+1] = max(grid[i+1][j],grid[i][j+1])
return grid到此這篇關于python 動態(tài)規(guī)劃(背包問題和最長公共子串)的文章就介紹到這了,更多相關python 動態(tài)規(guī)劃內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
小議Python中自定義函數(shù)的可變參數(shù)的使用及注意點
Python函數(shù)的默認值參數(shù)只會在函數(shù)定義處被解析一次,以后再使用時這個默認值還是一樣,這在與可變參數(shù)共同使用時便會產(chǎn)生困惑,下面就來小議Python中自定義函數(shù)的可變參數(shù)的使用及注意點2016-06-06
python matplotlib實現(xiàn)將圖例放在圖外
這篇文章主要介紹了python matplotlib實現(xiàn)將圖例放在圖外,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04

