- 简单化:size可以不同,返回小数组的累加和
- 思路:两数组的和最接近=》小的数组的和最接近1 /2整体和=》 #背包问题
- 思路:从[i~len]能自由选择,结果不超过rest
- 传入传出:i,rest
- base case:i=lenreturn 0;
- 限制:rest-arr[i]>0
- 原版:size相同,返回小数组的累加。跟简单版的差别在于多了一个pick数限制
- 思路:从[i~len]能自由选择,结果不超过rest,且pick数要为len/2
- base case:i->len,rest->0,pick=len/2
- 传入传出:i,rest,pick
- 限制:i->len,pick>0,rest>0
- 决策:
- i->len,pick没选够,return 0
- i没到len,pick已经选够了,则不走“选当前数字”的选项
- i没到len,rest-arr[i]<0也是不走“选当前数字”的选项
- 化简(总结):等i->len时pick=0,则返回0,否则返回-1 。在上层处理不可达的情况。只要rest-arr[i]>0就可以选当前数
- 不对pick进行减枝



本文探讨了背包问题的简化版本及原版问题的解决思路,包括如何通过递归方式找到两个数组组合中接近目标值的和,重点讲解了在递归过程中如何设置基例条件、传递参数以及做出决策。
172万+

被折叠的 条评论
为什么被折叠?



