— By cuizhenkai
1.优化搜索顺序
从小到大排序, 优先尝试较长的木棍。
理解:
- 从最大开始可以较快的排除不可能的分支,避免
dfs
进入比较深的树。 - 若从最小开始,则有可能前几根可以拼好,但是后面的不能满足条件,让
dfs
进入了更深的层。
2. 排除等效冗余
A ) 限制先后加入一根原始木棍的长度递减。
理解:
- 先拼长度为 $x$,再拼为 $y$ 的木棍 $(x < y)$ 与反之是等效的。
B ) 对于当前原始木棒,记录最近一次尝试拼接的长度,如果失败回溯,不再向该木棒中添加一样长的木棍。
—— 这个比较好理解。
C ) 若在当前原始木棒中,尝试的第一根木棍就失败,那么该分支失败。
理解:
- 按照上面的剪枝,我们可以知道,对一根原始木棒,尝试的第一根木棍就失败,意味着其他的空木棒也必定失败。
D ) 若向一根原始木棒拼接了一根木棍后,恰好成功,但是下面的分支失败,那么此分支失败
理解:
- 用一根拼好比用若干根其他木棍拼好要更优,原因是长度小的木棍更灵活。
Code:
1 |
|
标签:Sticks,木棒,理解,原始,木棍,失败,一根 来源: https://www.cnblogs.com/lijianming180/p/12360837.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。