回溯——“子集之和”问题
来源:互联网 发布:新网域名管理 编辑:程序博客网 时间:2024/06/07 07:23
0-1背包问题这种问题属于子集之和问题:有n个正整数wi和一个正整数W,要求从这n个正整数中找出之和为W的子集。
我们先将所有wi按照非递减的顺序排列,然后建立状态空间树,有n+1级,每一级表示是否含有排序后的wi元素,从起点开始,左子树表示含有该元素,右子树表示不含有该元素。依此类推,还可以对状态空间树进行修剪,当前总量+剩余总量<W时,该结点是无希望的;当当前总量>W时,该节点也是无希望的;
int sumOfSubjects(index i,int wight,int total)//i;从w[i]开始判断;wight:要求总量;total: 剩余总量 {if(promise(i))//该节点是有希望的 if(weight==W)cout<<include[1...i];//输出包含情况 else{include[i+1]=1;//包含 w[i+1]sumOfSubjects(i+1,wight+w[i+1],total-w[i+1]);include[i+1]=0;//不包含 w[i+1]sumOfSubjects(i+1,wight,total-w[i+1]);}}bool promise(index i){return (wight+total>=W)&&(wight==W||weight+w[i+1]<=w);}顶级调用为
sumOfSubjects(0,0,total)算法中不需要判断i=n为终止条件,因为当i=n是total=0;意味着上一级中wight+total>=W,则这一级中wight+total>=W恒成立,若相等则符合条件,输出;若大于则wight>W不符合后面的条件,跳出;
阅读全文
0 0
- 回溯——“子集之和”问题
- 回溯-子集问题
- 回溯法——求子集
- 回溯法——求子集 收藏
- 回溯法——集合求子集
- 回溯法-子集和数问题
- 回溯法---->子集和数问题
- 回溯法 子集和问题
- 【回溯法】求子集问题
- 算法——回溯法(子集、全排列、皇后问题)
- 回溯子集树与排列树——装载问题&旅行售货员问题(算法设计课题)
- 回溯法——关于子集树和排列树
- 回溯法(子集树)----- 装载问题
- 回溯法之子集和问题
- 回溯法2--子集和问题
- 子集和问题 回溯法求解
- 子集和数问题 C++程序实现 回溯
- 回溯算法-定和子集问题
- 又话指针
- Centos7 安装netcat
- 确定自己的技术路线
- 动态修改日志级别
- CodeForces 279C
- 回溯——“子集之和”问题
- VS中定义的DEBUG常量
- 单词分割(Word Splitting)
- 規約に関する
- CorelDRAW图标制作让设计变的如此简单明了
- Python实现Excel文件的读写操作
- bzoj4326 & UOJ150【NOIP2015】运输计划 ( 树上差分 + lca )
- python爬虫(Python读取TXT文件中的URL并下载文件)
- 引用去除(Quote Removal)