1. 问题可分而治之且 BFS 首先, 问题必须是可分而治之的, 并在最后合并. 分而治之(递归)是为了穷举, 合并是为了找最优.
Result r(costs[], target){
args = [];
for(cost in costs){
tmp = r(costs - cost, target - cost) + cost;
args += tmp;
}
return G(args);
}
虽然上面的代码是 DFS, 但形式上是 BFS, 而且也应该写成 BFS, 只不过 BFS 的代码不简洁而已.思考: 与贪婪算法的区别.2. 合并函数 G(...) 可迭代处理因为……