HDU 1455 Sticks(经典剪枝)
1|0Sticks
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 14667 Accepted Submission(s): 4517
【题意】
剪成n个短柴柴,让你求这些短柴柴组合成原来长度的木棍的最短长度。
<==>
将n个数分成m堆,每一堆的和都相等为H,求H最小为多少。
【分析】
题中有一些数字:
50:指剪后每一段柴柴长度最大为50。
64:指剪后柴柴数量最大为64。
还有注意,有可能有柴柴根本就没有减。
比如:
5
1 2 3 4 5
最短的就是 1+4=2+3=5
初始就是3根长度为5的柴柴,题目没要求求多少根,只求长度最小为多少。
做法:按照深搜步骤来就行,就是注意一下一些地方的剪枝
主要是dfs函数中那三个if里的剪枝。
第一条剪枝:
如果你剩余的长度和当前长度相等,就没有必要搜索,也就是说当你剩余长度为3,接着搜索3,发现不符合,就不需要搜索剩下能构成3的(比如2+1,1+1+1等)
第二条剪枝:(重要的)
意思是如果剩余的长度等于柴柴总长度,而当前不符合,就不需要接着搜索。
也就是说,接下来搜索的长度就是柴柴目标长度,而你当前长度根本用不上,那就肯定不符合了。
例子: 假设 要搜索目标长度为 7 :绳长有 7 6 3 2 2.
假设 第一个7 搜索完,接下来搜索6 发现6没有1来配对,程序会接下来搜索 3 2 2,但很明显根本不需要搜索后面的,前面有一个用不上,后面就不需要再搜索了。
第三条剪枝:
如果当前长度的不满足,那么相同长度的就不需要再次去搜索
【代码】
__EOF__

本文链接:https://www.cnblogs.com/shenben/p/10380671.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
2017-02-14 Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined)
2017-02-14 串 2016Vijos省选集训 day3[AC自动机]
2017-02-14 3354 [IOI2005]河流
2017-02-14 COGS 1507. [IOI2000]邮局