Leetcode: Dynamic Programming之Shopping offers

這道題跟Knapsack 問題非常相似, 但是難度上有很大的升級。 首先, 這個不是課本上的例子,我們得自己做出了。

還有一個問題,在knapsack里, 物品的只有一種版本的套餐。 這里有普通零售價格以及套餐價格。 Also, knapsack只要管背包上限的條件,但是這題你已知每個產(chǎn)品你要購買的數(shù)量,也就是你同時有好多種限制條件。如果你分開處理, 買2個A, 3個B比如說。 你2個A是這個offer買的, 3個B另一個offer買的。這種單獨處理沒考慮到萬一有那么一種套餐直接把2A ?3B全包了還特別便宜。

上面基本是我看到這道題時候的內(nèi)心戲。 然后如何尋找子問題?如果是復雜的情況怎么辦。 比如說買10個東西, A有3個現(xiàn)在,B有3個現(xiàn)在。 有好多種不同的搭配方式阿。。。想到這個時候就有點蛋疼了。。難道是DP+DFS?

看完官方答案后跪拜。。。。

答案拿什么當做subproblem? 拿套餐的范圍作為subproblem。

也就是最基本的版本,1. 沒有特別套餐的話, 只能單價買產(chǎn)品,這種情況的價格就是最初級的subproblem的解。

2. 如果有特別套餐1的話。 這個套餐會不會被使用。

3. 如果有特別套餐2的話, 會不會被使用。


。。。

用的是recursion+DP。 這里的DP 沒有用array 之類的,也是非常不按套路

為什么是recursion? 因為最終答案是:沒有套餐的情況和? 至少有第1個套餐option套餐的情況下的最好情況做比較出來的。? 至少有第1個套餐option套餐是由? 至少有第1個套餐option套餐 ?和至少有2個套餐的情況比較出來的。。。 所以要一路算到后面。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容