一个经典剪枝题
思路:
dfs
当然纯的dfs绝对会TLE, 所以要考虑剪枝
小木棍所能拼成的木棍长度一定是小木棍长度总和的整除数, 且小于小木棍中最长的
搜索时首先考虑能用的小木棍中最长的, 如果无法拼成则直接返回
用桶储存小木棍, 这样可以更轻松地做到(2), 且可以避免考虑同样长度的小木棍
如果考虑某根小木棍时, 已经到达目标长度, 但在后面的搜索中未能找到解, 直接返回. 因为后面的小木棍一定更短, 如果考虑后面的小木棍不会更优
具体方法结合代码理解
代码:
1 |
|
一个经典剪枝题
dfs
当然纯的dfs绝对会TLE, 所以要考虑剪枝
小木棍所能拼成的木棍长度一定是小木棍长度总和的整除数, 且小于小木棍中最长的
搜索时首先考虑能用的小木棍中最长的, 如果无法拼成则直接返回
用桶储存小木棍, 这样可以更轻松地做到(2), 且可以避免考虑同样长度的小木棍
如果考虑某根小木棍时, 已经到达目标长度, 但在后面的搜索中未能找到解, 直接返回. 因为后面的小木棍一定更短, 如果考虑后面的小木棍不会更优
具体方法结合代码理解
1 | #include <iostream> |