**:
如下圖:
從1到4找出一條路徑,要求路徑的總長度mod4的餘數最小。
分析:一條從1到4的最優路徑,在它走到2或3時mod4的餘數不一定最小。也就是說,最優策略的子策略不一定最優,所以本問題不滿足最優化原理,那麼也就不能用動態規劃來解決。但是我們可以把它轉化為判定性問題,用遞推來解決。
設dp[k][i]為bool型陣列,表示從1點到k點長度mod4為i的路徑是否存在,設len[k][i]表示從第k-1到第k點之間的第i條邊的長度。那麼就有
顯然邊界條件是:
那麼結果就是使
上面的動態規劃方程是有問題的。因為i-len[k][1]可能為負數,陣列可能越界。
應該是:
為什麼會是dp[k-1][ (sk-len[k][i]) % 4] 這個表示式呢。
其實sk=(s(k-1) +len[k][i] )%4;
所以通過sk去求s(k-1)的時候 s(k-1) + len[k][i] =sk + 4*e (e為整數 0 或1)
所以 s(k-1) =( sk +4 *e - len[k][i])% 4
A (最優路徑)
尋路 尋找最短路徑並避開障礙物 首先將地圖虛擬化,將地圖劃分為乙個乙個的小方塊,這樣可以用二維陣列來表示地圖。如下所示,綠色塊 a 是起點,紅色塊 b 是終點,中間藍色塊是障礙物,白色塊是空地。先羅列出所有的步驟,等會按照例子一步一步分析 1 尋路步驟 步驟1.從起點a開始,把a作為乙個等待檢查的方...
最優路徑問題 mod 4 的最小值
mod 4 最優路徑問題 在上圖中找出從第1點到第4點的一條路徑,要求路徑長度mod 4的餘數最小。分析 這個圖是乙個多段圖,而且是乙個特殊的多段圖。雖然這個圖的形式比一般的多段圖要簡單,但是這個最優路徑問題卻不能用動態程式設計方法來做。因為一條從第1點到第4點的最優路徑,在它走到第2點 第3點時,...
Java求數塔(最優路徑)問題
有這樣乙個陣列 求從數塔頂端至底端和最大的最優路徑。自底向頂 解析 對每一層的每兩個相鄰資料而言 最優路徑從他們的父節點值會達到他們其中乙個,例如如果最優路徑經過第三層的2 那麼第4層他的兩個子節點19,7中必然選擇19 對於2來講,如果最優路徑經過他,他選擇了19以後就能為路徑貢獻21 相鄰點18...