有n件物品和乙個容量為 v的揹包,放入第i件物品的空間消耗是ci
,得到的價值是wi
。求解將哪些物品裝入揹包可使價值總和最大。
基本思路:
定義子問題:f[i][j]表示將前i個物品放入容量為j的揹包中。
求解時只需考慮第i個物品放入或者不放入兩種可能
則有狀態轉移方程:f[i][j] = max
else dp[i][j] = 0;最長公共子串行與最長公共子串不同,可以不連續
那麼在狀態轉移方程中,在str1[i]與str2[j]如果不等,dp[i][j] 不是為0,而是等於max(dp[i-1][j],dp[i][j-1], 如下:
狀態記錄二維陣列大小可以為dp[n1+1][n2+1], 留dp[0][0]作為初始狀態
if(str1[i] == str2[j])
else
動態規劃問題系列 Disk Schedule
有很多從磁碟讀取資料的需求,包括順序讀取 隨機讀取。為了提高效率,需要人為安排磁碟讀取。然而,在現實中,這種做法很複雜。我們考慮乙個相對簡單的場景。磁碟有許多軌道,每個軌道有許多扇區,用於儲存資料。當我們想在特定扇區來讀取資料時,磁頭需要跳轉到特定的軌道 具體扇區進行讀取操作。為了簡單,我們假設磁頭...
動態規劃系列(2) 01揹包問題的動態規劃解法
問題 有n 個物品,它們有各自的重量和價值,現有給定容量的揹包,如何讓揹包裡裝入的物品具有最大的價值總和?dynamic programming 0 1 package problem include include include using namespace std struct item i...
整數劃分系列問題(動態規劃)
今天上演算法分析與設計課時,提到整數劃分問題,但是因為之前沒有很好地理解這一系列的問題。當被老師問到你們做演算法的應該會這個問題吧,我當時也不太記得,但是只能硬頭皮試著去寫了下,用的是brute force,老師果斷說我的方法跑不出正確的解,但是課堂上我也沒有去解釋了。課後自己驗證了一下,沒有問題,...