這道題跟Knapsack 問題非常相似, 但是難度上有很大的升級。 首先, 這個不是課本上的例子,我們得自己做出了。
還有一個問題,在knapsack里, 物品的只有一種版本的套餐。 這里有普通零售價格以及套餐價格。 Also, knapsack只要管背包上限的條件,但是這題你已知每個產(chǎn)品你要購買的數(shù)量,也就是你同時有好多種限制條件。如果你分開處理, 買2個A, 3個B比如說。 你2個A是這個offer買的, 3個B另一個offer買的。這種單獨處理沒考慮到萬一有那么一種套餐直接把2A ?3B全包了還特別便宜。
上面基本是我看到這道題時候的內(nèi)心戲。 然后如何尋找子問題?如果是復(fù)雜的情況怎么辦。 比如說買10個東西, A有3個現(xiàn)在,B有3個現(xiàn)在。 有好多種不同的搭配方式阿。。。想到這個時候就有點蛋疼了。。難道是DP+DFS?
看完官方答案后跪拜。。。。
答案拿什么當(dāng)做subproblem? 拿套餐的范圍作為subproblem。
也就是最基本的版本,1. 沒有特別套餐的話, 只能單價買產(chǎn)品,這種情況的價格就是最初級的subproblem的解。
2. 如果有特別套餐1的話。 這個套餐會不會被使用。
3. 如果有特別套餐2的話, 會不會被使用。
。。。
用的是recursion+DP。 這里的DP 沒有用array 之類的,也是非常不按套路
為什么是recursion? 因為最終答案是:沒有套餐的情況和? 至少有第1個套餐option套餐的情況下的最好情況做比較出來的。? 至少有第1個套餐option套餐是由? 至少有第1個套餐option套餐 ?和至少有2個套餐的情況比較出來的。。。 所以要一路算到后面。