
这道题跟Knapsack 问题非常相似, 但是难度上有很大的升级。 首先, 这个不是课本上的例子,我们得自己做出了。
还有一个问题,在knapsack里, 物品的只有一种版本的套餐。 这里有普通零售价格以及套餐价格。 Also, knapsack只要管背包上限的条件,但是这题你已知每个产品你要购买的数量,也就是你同时有好多种限制条件。如果你分开处理, 买2个A, 3个B比如说。 你2个A是这个offer买的, 3个B另一个offer买的。这种单独处理没考虑到万一有那么一种套餐直接把2A 3B全包了还特别便宜。
上面基本是我看到这道题时候的内心戏。 然后如何寻找子问题?如果是复杂的情况怎么办。 比如说买10个东西, A有3个现在,B有3个现在。 有好多种不同的搭配方式阿。。。想到这个时候就有点蛋疼了。。难道是DP+DFS?


看完官方答案后跪拜。。。。
答案拿什么当做subproblem? 拿套餐的范围作为subproblem。
也就是最基本的版本,1. 没有特别套餐的话, 只能单价买产品,这种情况的价格就是最初级的subproblem的解。
2. 如果有特别套餐1的话。 这个套餐会不会被使用。
3. 如果有特别套餐2的话, 会不会被使用。
。。。
用的是recursion+DP。 这里的DP 没有用array 之类的,也是非常不按套路
为什么是recursion? 因为最终答案是:没有套餐的情况和 至少有第1个套餐option套餐的情况下的最好情况做比较出来的。 至少有第1个套餐option套餐是由 至少有第1个套餐option套餐 和至少有2个套餐的情况比较出来的。。。 所以要一路算到后面。