- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序的设计实习(II):算法的设计 16 深度优先搜索.pptx
程序设计实习;内容提要;枚举;枚举;搜索:复杂的、高级的枚举;搜索的难点;影响搜索效率的因素;深度优先搜索;例题: POJ1011 木棒问题;输入数据
由多个案例组成,每个案例包括两行。第一行是一个不超过64的整数,表示裁截之后共有多少节木棒。第二行是经过裁截后,所得到的各节木棒的长度。在最后一个案例之后,是零。
输出要求
为每个案例,分别输出木棒的可能最小长度,每个案例占一行。
输入样例
9
5 2 1 5 2 1 5 2 1
4
1 2 3 4
0
输出样例
6
5;解题思路;还原过程;状态演化规则;提高搜索效率;D=L时(A2 B+1 C-1 D2)不能演化出目标状态;D=X1时(A2 B+1 C-1 D2)不能演化出目标状态; 规划拼接顺序;#include vector
#include iostream
#include algorithm
using namespace std;
class CStickType {
public:
int length;
int number;
CStickType(int len);
bool operator(const CStickType s);
bool operator==(const CStickType s);
bool operator(int x);
};
CStickType::CStickType(int len) {
length = len;
number = 1;
};bool CStickType::operator(const CStickType s) {
return lengths.length;
}
bool CStickType::operator==(const CStickType s) {
return length==s.length;
}
bool CStickType::operator(int x) {
return lengthx || number==0;
}
vectorCStickType sticks;
int stickTotal, typeTotal, l_max, l_min, cutPart, usedSticks;
;bool recover_original(int candidate) {
int curCutPart, curUsedSticks, selected;
curCutPart = cutPart;
curUsedSticks = usedSticks;
while ( candidatetypeTotal ) {
//从剩余的木棒中,寻找长度不超过cutPart的最长木棒
if ( sticks[candidate]cutPart ) {
candidate++;
continue;
}
selected = candidate;
sticks[selected].number--;
cutPart = cutPart - sticks[selected].length;
usedSticks++;
//恰好拼接完全部木棒
if ( cutPart==0 usedSticks==stickTotal ) return true;
//拼接成功一根长度为l_min的木棒
if ( cutPart == 0 ) {
cutPart = l_min;
candidate = 0;
} ; //用完了全部木棒,无法继续拼接
if ( usedSticks==stickTotal ) {
sticks[selected].number++;
cutPart = curCutPart;
usedSticks = curUsedSticks;
return false;
}
//继续拼接剩余???木棒
if ( recover_original(candidate) ) return true;
//选择下一个长度的木棒重新拼接
sticks[selected].number++;
//剪枝:不要尝试替换第一根木棒;至少要替换两根木棒
if ( curCutPart == l_min || curCutPart==sticks[selected].length )
return false;
cutPart = curCutPart;
usedSticks = curUsedSticks;
candidate++;
}
return false;
};int main() {
int i;
ve
您可能关注的文档
- 矿体变化性及其数学分析基本方法.ppt
- 矿床学01基本的 概念(中南大学 地质工程专业A方向)34.ppt
- 矿床学课件5 第五章 勘探技术知识手段及其合理利用.ppt
- 矿物质 营养和 与食品卫生学 .ppt
- 矿用绞车工培训教材 第二节 测井绞车安全操作相关知识.ppt
- 研 Unit 2 Rigidity and Suppleness 英汉对比和 与翻译 研究生 .ppt
- 研_Unit 4 Static vs. Dynamic 英汉对比和 与翻译 研究生 .ppt
- 研_第1单元 语言 思维 翻译 英汉对比和 与翻译 研究生 .ppt
- 研一章 基因、基因组和 与基因组学 医学分子生物学.ppt
- 研究基本方法与论文课件1科技论文概述及综述写作160517.ppt
- 程序的设计实习(II):算法的设计 18_方程求解.pptx
- 程序的设计实习(II):算法的设计 第13讲 高精度计算.pptx
- 程序的设计实习(II):算法的设计 第15讲 递归.pptx
- 程序设计基础教程(第2版)第3章 层叠样式表(CSS)技术知识.ppt
- 税制改革和 与税收政策解读 .ppt
- 税务会计(第二版)课件项目七:其他税会计核算和 与申报.pptx
- 税务会计(第二版)课件项目三:消费税会计核算和 与申报.pptx
- 税务会计(第二版)课件项目六:个人所得税会计核算和 与申报.pptx
- 税务筹划税收筹划“41号文”和 与非货币性资产投资征税.ppt
- 税务筹划(第五版)第02章 税务筹划的基本的 原理.ppt
文档评论(0)