使用回溯法解0/1背包问题n=3,c=9_背包问题C语言算法

使用回溯法解0/1背包问题n=3,c=9_背包问题C语言算法解01背包问题有很多种方法,就我知道的就有动态规划,回溯法,分支界限法这几种,下面就列出我的回溯法解法,以供参考intcapacity;//背包容量intn;//物品数intweight[0..n];//物品重量数组intprice[0..n];//物品价值数组intcur_weight;//当前重量intcur_price;//当前价值int…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

解01背包问题有很多种方法,就我知道的就有动态规划,回溯法,分支界限法这几种,下面就列出我的回溯法解法,以供参考

int capacity; //背包容量

int n;        //物品数

int weight[0..n];  //物品重量数组

int price[0..n];  //物品价值数组

int cur_weight;   //当前重量

int cur_price;    //当前价值

int best_price;   //当前最优值

int best_solution[0..n];  //当前最优解

int cur_solution[0..n];   //当前解

//估计 装入第i个物品后能得到的最大价值, 从而做为剪枝的依据

int upper_bound(int i)

{

//计算上界

int remain_capacity = capacity – cur_weight;

int  b = remain_capacity;

//按单位重量的价值  递减序 装入物品

while(i<=n && w[i]<=remain_capacity)

{

remain_capacity-=w[i];

b+=p[i];

i++;

}

//装满背包

if( i<=n )

b+=p[i]/w[i]*remain_capacity;  //准确的说这是一个上界,不是上确界

return b;

}

void dfs(int i)

{

//结束条件

if(i>n)

{

if(best_price >cur_price)       //到此为止了,有用往后找了

{

for(int j=1;j<=n;j++)

best_solution[j] =x[j];

}

return ;

}

//搜索左子树,要当前结点

if(cur_weight+weght[i]< = capacity)

{

cur_solution[i] = 1;

cur_weight += weight[i];

cur_price  += price[i];

dfs(i+1);           cur_weight   -= weight[i];

cur_price  -= price[i];

}

//搜索右子树,不要当前结点,即数组中下一个结点

if(upper_bound(u+1)>best_price)

{            cur_solution[i]=0;

dfs(i+1);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179547.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux是什么

    linux是什么

    2021年9月11日
    53
  • [Fibre Channle 实战之二] FC Target的创建和使用

    [Fibre Channle 实战之二] FC Target的创建和使用

    2022年3月11日
    38
  • Kaptcha 验证码框架使用

    Kaptcha 验证码框架使用基于springboot验证码框架kaptcha使用一、统一步骤引入maven坐标<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId>…

    2022年6月18日
    55
  • 滤波算法(四)—— 卡尔曼滤波算法

    滤波算法(四)—— 卡尔曼滤波算法一、算法介绍卡尔曼滤波是一个神奇的滤波算法,应用非常广泛,它是一种结合先验经验、测量更新的状态估计算法。1、状态估计首先,对于一个我们关心的物理量,我们假设它符合下面的规律其中,为该物理量本周期的实际值,为该物理量上一个周期的实际值,当然这个物理量可能不符合这个规律,我们只是做了一个假设。不同的物理量符合的规律不同,是我们的经验,我们根据这个规律…

    2022年6月13日
    53
  • 关于学术论文投稿中的 Cover Letter「建议收藏」

    关于学术论文投稿中的 Cover Letter「建议收藏」  学术期刊报道原始研究工作的论文,一般分为需要快速发表的通信、快报类(communication,letter等)和报道系统研究工作的全文类(fullpaper,article)两种形式。投这两种文章,coverletter和论文Introduction的写法是不同的。    对于需要以通讯或快报形式快速发表的工作,可以是初步的研究结果(preliminaryresult),强调的是工…

    2022年5月22日
    48
  • 【图像处理算法】直方图均衡化「建议收藏」

    【图像处理算法】直方图均衡化「建议收藏」参考文献:RafaelC.Gonzalez,RichardE.Woods,DigitalImageProcessing(ThirdEdition) 胡学龙.数字图像处理(第三版) 左飞.图像处理中的数学修炼目录直方图均衡化的介绍直方图的概念直方图均衡化的理论基础手工实现直方图均衡化MATLAB上实现直方图均衡化直方图均衡化的缺点直方图均衡…

    2022年5月17日
    88

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号