DP 系列 - The Rod Cutting Problem

James | Jan 21, 2024 min read

如果賣出長度是 i 的 rod 可以得 pi 元,怎麼切一條長度是 n 的 rod 使總收入最大


方法一、遞迴

最直觀的方式就是用遞迴解,如下圖所示,rn 為切割長度 n 的 rod 可得的最大收入,假設 i 為最佳解中的第一段長度,rn = pi + rn-i,因為 pi 是切割的最佳解中第一段的獲利,再加上剩餘部分最佳獲利就是我們要的答案。

i 怎麼求?利用迴圈讓 i 從 0 跑到 n-1,求出每一組 pi + rn-i,找到最大的那組就是答案。

但這樣會遇到一個問題,每一次的 rn-i 都需要遞迴下去找到他的最佳解,這樣重複的 r 就會需要算很多次,以下圖為例,算 r4 的時候需要算 r3, r2, r1, r0,算 r3 又要再算一次 r2, r1, r0,因此我們需要利用 DP 來幫我們節省時間。

Recursive

方法二、DP

我們可以建表紀錄每一個 ri 的數值,這樣就不用每次遇到 i 都再算一次

已知 r0, r1,就可以利用 r0, r1 算 r2r2 = max( p1+r1, p2+r0 ),再來利用 r1, r2 算 r3,最後就知道 r5,所以最重要的還是遞迴式 pi + rn-i

DP

小筆記

建表紀錄遞迴中需要重複的部分,是 DP 裡很重要的工具!

comments powered by Disqus