社区
数据结构与算法
帖子详情
用回溯法解决背包问题,小弟愚笨,大家给个思路吧
wilcox1937
2003-11-22 03:04:17
如题,谢谢
...全文
218
18
打赏
收藏
用回溯法解决背包问题,小弟愚笨,大家给个思路吧
如题,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wilcox1937
2003-11-28
打赏
举报
回复
我还是认为那个不是用的回溯法,不过我这边的问题解决了,还是谢谢各位的指导,结帐
wilcox1937
2003-11-24
打赏
举报
回复
哪位给解释下哈,多谢~~~
v_salt
2003-11-24
打赏
举报
回复
01背包还是别的?
levinjoe
2003-11-24
打赏
举报
回复
仔细看了一下,是回溯啊!
依次判断如果满足结束条件,满足的话比较是否比当前最大的大,大的话修改当前最大并退回!--------回溯
设置当前物品不选,继续;
如退回设置选,继续!
这种算法其实近似遍历所有选择,只是加了一个边界检测优化,楼主不要死扣回溯,这也符合回溯的算法思想,你把它看成如下的树就明白了;
root
0 1
0 1 0 1
........
你写成非递归就明白了!
LeeMaRS
2003-11-24
打赏
举报
回复
-.-b 为什么说不是回溯法?
wilcox1937
2003-11-24
打赏
举报
回复
程序看懂了,不是回溯法呀,我说的没错饿。麻烦大家再帮帮忙。
michaelli
2003-11-23
打赏
举报
回复
本来想给你写个源程序的,楼上的兄弟已经写好了
:)
wilcox1937
2003-11-23
打赏
举报
回复
楼上的,题目要求用回溯,上次要求用贪心法,也只好做了
LeeMaRS
2003-11-23
打赏
举报
回复
loewe的很明显就是回溯法啊...
caohoujie
2003-11-23
打赏
举报
回复
为什么要用回搠?
这题应该用动态
规划法啊!?
wilcox1937
2003-11-23
打赏
举报
回复
loewe(可怜没人爱),这样不是用回溯法做的吧,要求用回溯法,不过还是谢谢你.
aaalife
2003-11-22
打赏
举报
回复
你说你那一点不明白?
列出来
八皇后 的问题你懂了嘛??
如果懂了,背包 应该没什么问题啊
ZhangYv
2003-11-22
打赏
举报
回复
GOOGLE
SoftWare1999
2003-11-22
打赏
举报
回复
没什么思路啊,
如果背包不满,就在加入一个。
满了就回溯,卸载上一个装的。
SoftWare1999
2003-11-22
打赏
举报
回复
思想上应该是先按照效益比递减排序,比如说现在有5,4,3,2,1排好,先定个约束条件,然后一步步想下,5->4->.......如果当取到2时不满足约束条件了,就回溯到3,
这里没错,只不过吧3再设成不装,
再2->1,当3回溯完,再回溯到4。
loewe
2003-11-22
打赏
举报
回复
#include<iostream.h>
#define N 5
int w[N],p[N],save[N],cop[N],Max; //w[i]表示第i个物品的重量,p[i]是其价值
void Search(int i,int weight,int R) //weight 表示剩余可放重量,R表示当前已经转载的重量
{
if(i==N || weight==0)
{
if(R>Max)
{
Max=R; //最大
for(int k=0;k<N;k++)
save[k]=cop[k]; //记录哪些物品被放入背包,1表示放入
}
return ;
}
else
{
if(w[i]<weight)
{
cop[i]=1;
Search(i+1,weight-w[i],R+p[i]);
cop[i]=0;
Search(i+1,weight,R);
}
else
Search(i+1,weight,R);
}
}
void main()
{
int i,weight;
cout<<"Weight = ";
cin>>weight;
for(i=0;i<N;i++)
{
cop[i]=0;
cout<<"The "<<i<<" : "<<endl;
cin>>w[i]>>p[i];
}
Max=0;
Search(0,weight,0);
cout<<endl<<"Max = "<<Max<<endl; //结果
for(i=0;i<N;i++)
if(save[i]!=0)
cout<<i<<"\t";
}
用了以下数据测试:
weight = 40
w: 8 16 21 17 12
p: 8 14 16 11 7
结果是:
Max = 30
1 2
wilcox1937
2003-11-22
打赏
举报
回复
思想上应该是先按照效益比递减排序,比如说现在有5,4,3,2,1排好,先定个约束条件,然后一步步想下,5->4->.......如果当取到2时不满足约束条件了,就回溯到3,从3开始有3->1->2,当3回溯完,再回溯到4。可是具体用代码实现起来我有点麻烦,我要请教各位的就是这个。多谢,但愿我表达的还够清楚。
stephen85
2003-11-22
打赏
举报
回复
up
十三个经典算法研究PDF文档[带目录+标签]
6. **
回溯法
**:在
解决
如八皇后问题、N皇后问题这类组合优化问题时,
回溯法
是一种有效的策略,通过试探性的构建
解决
方案并适时回退以避免死胡同。 7. **红黑树**:是一种自平衡的二叉查找树,它的设计确保了插入、...
c语言常用算法集
这些数据结构的理解和操作能力是
解决
问题的关键。 2. **排序算法**:CH02和CH04可能涵盖了一些基本和高效的排序算法,例如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。排序算法的学习有助于理解...
1000多种java算法大全源码包
Java算法大全源码包是一个集合了众多算法实现的资源库,涵盖了数据结构...通过阅读和实践这些源码,你可以深入了解各种算法的工作原理,并提高
解决
问题的能力。无论是初学者还是经验丰富的开发者,都可以从中受益匪浅。
java算法大全(含源码包)
6. **动态规划**:这是一种
解决
问题的策略,通过将大问题分解为小问题来求解,如
背包问题
、最长公共子序列、最小编辑距离等。 7. **数据结构**:包括数组、链表、栈、队列、哈希表、树(二叉树、平衡树如AVL树、...
java数百种算法实现
在计算机科学中,算法是
解决
问题或执行任务的明确步骤。"java数百种算法实现"这个资源集合显然是为Java开发者提供了一个广泛的算法实践库,涵盖了多种算法类型,旨在帮助他们理解和应用这些算法。 在Java中实现算法...
数据结构与算法
33,029
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章