[英]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.