簡體   English   中英

動態編程-工作選擇

[英]Dynamic Programming - Job Selection

我正在嘗試使用動態編程解決職位選擇問題。 問題如下:-每天有一份工作,每天都有不同的支出-您不能連續工作三天(如果您在第一天和第二天工作,則必須在第三天休息一下)-來吧制定工作計划以最大程度地賺錢

我已經將問題的輸入和輸出形式化如下:

輸入:P [1 ... n] n個正數的列表輸出:m,最大可能的支出和A,一組索引{1,... n},如果i在A中,且i + 1在A中,那么i + 2不在A中。m等於集合A中所有值i的P [i]之和。

我被困在進行自我簡化的思考過程中,然后考慮使用動態編程算法來計算最大收益。

非常感謝您的協助-謝謝!

通常,一旦決定了每個點需要考慮多少狀態,動態編程就相對簡單了,並且解決方案是否有效取決於您選擇的狀態是否良好。

在這里,我建議每個時間點的狀態是自上次休息以來是0、1或2天。 因此,對於自休息日起的每一天和0,1,2天,我假定到休息日為0,1,2天,然后計算直到該天(包括該天)的最大可能支出。

休息后的0天內,最高支出是前一天任何州的最高可能支出。 由於您正在休息,因此當天沒有任何貢獻。

休息后1天的最高支出是該天的支出加上該天休息后0天狀態下所有前幾天的最高可能支出。

休息后2天的最高支出是當前和前幾天的支出加上兩天前的最大可能支出,以及自該天的最后休息以來為0天的狀態。

因此,您可以使用以前的計算從左到右計算最大支出,總的最大數是與最后一天與任何州相關聯的最大支出。

我認為以這種方式制定答案會更容易:

解決方案:

在[0,1] ^ n |中X = [x1,x2,...,xn] 對於每個k = i + 2 = j + 1,i> = 1,k <= n,xi + xj + zk <= 2。

最大化:

f [X] = i在[1,N]中的總和(xi * vi),其中vi是工作日i的支出。

然后,考慮到解決方案的限制,遞歸算法必須決定是否繼續工作一天或者是否要使功能最大化。 這是DP的非常簡單的基本架構。

Mcdowella很好地解釋了針對此特定DP問題的狀態和轉換選擇。 剩下唯一要添加的是圖形表示。 希望能幫助到你。 作業選擇DP

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM