[英]Dynamic Programming Maximum Sequence
我從事股票交易。 我有兩個表示貨幣的數組。
我希望能夠在兩個數組中找到最大序列。
但是,當我在兩個數組之間切換時,會產生20.00英鎊的固定成本
例如:
陣列1:12,21,45,10,42陣列2:52,3,4,10,35
我如何使用動態編程來解決此問題。
即找到序列的最大權重。
DP解決方案的一個明顯的首次嘗試是定義一個數組P [i],它是事務1到i可獲得的最大權重。 問題在於,為了更新此數組,我們需要知道上一個索引期間的位置,因為我們需要知道是否需要收取£20.00的更改票價。
我們將通過添加一個附加參數來控制我們在上一個事務中所在的位置(Array1或Array2)來對這些額外的條件信息進行編碼。
P [i,A1] =交易1到i的最大(順序)交易,假設交易i在A1中
P [i,A2] =交易1到i的最大(順序)交易,假設交易i在A2中。
對於基本情況, 假設我們從A1開始,則不產生固定成本,因此P [0,A1] = 0。
另一方面,如果我們要從A2開始,則需要付費才能到達那里,因此,P [0,A2] = -20。
注意 : 如果我們從A2而不是A1開始,我們可以更改基本情況 ,但是我假設我們必須從A1開始。 如果可以從任何一個開始,則可以按照以下步驟計算兩種方式並找到兩者的最大值。
通常,對於i> 0,要計算P [i,A1],我們考慮兩種可能性,這取決於我們上次交易的位置。
如果我們在A1中,則不需要花費成本,我們可以在交易i − 1產生的任何值的基礎上獲得A [i]的值。
P [i, A1] = A1[i] + P [i − 1, A1].
另一方面,如果我們在A2的最后一筆交易中,我們需要支付20的產生成本,但是我們仍然從第一筆i-1交易中獲得A1交易和應計利潤。 在這種情況下,我們
P[i, A1] = A1[i] + P [i − 1, A2] − 20.
我們有以下兩個遞歸規則:
P [i, A1] = A1[i] + max(P [i − 1, A1], P [i − 1, A2] − 20).
P [i, A2] = A2[i] + max(P [i − 1, A2], P [i − 1, A1] − 20).
一旦成功計算出值P [i,A1]和P [i,A2],對於0≤i≤n,我們將返回P [n,A1]和P [n,A2]的最大值作為最終結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.