使用回溯法解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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在ThinkPHP中,if标签和比较标签对于变量的比较。

    在ThinkPHP中,if标签和比较标签对于变量的比较。

    2021年9月18日
    41
  • Win10共享打印机提示0x0000011b错误代码的解决方法[通俗易懂]

    Win10共享打印机提示0x0000011b错误代码的解决方法[通俗易懂]首先是在共享打印机的主机Windows是更新kb5005565这个补丁所导致的,那么我们在控制面板-卸载程序里卸载掉2021-09-15Windows更新的补丁KB5005565后重启电脑就好了。然后禁止Win10更新操作方法:鼠标右键“win”图标在弹出的菜单栏中选择“运行”选项,打开运行窗口后输入“services.msc”, 在打开的窗口中找到“windowsUpdate”启用选项,并双击打开, 在弹出的小窗口中的启动类型选项处点击选择“禁用”,点击“确定”另外win11出现的错误代.

    2025年8月26日
    17
  • 舆情监测系统 源码_2017年舆情大事件

    舆情监测系统 源码_2017年舆情大事件importbreeze.linalgimportorg.apache.spark.ml.Pipelineimportorg.apache.spark.ml.classification.MultilayerPerceptronClassifierimportorg.apache.spark.ml.evaluation.MulticlassClassificationEva…

    2022年9月20日
    1
  • pytorch loss反向传播出错

    pytorch loss反向传播出错在使用pytorch进行训练代码时,在运行loss.backward()误差反向传播时出错:RuntimeError:gradcanbeimplicitlycreatedonlyforscalaroutputsFile”train.py”,line143,intrainloss.backward()File”/usr/local/lib/python3.6/dist-packages/torch/tensor.py”,line198…

    2022年5月20日
    36
  • 完整javaEE学生信息管理系统[通俗易懂]

    完整javaEE学生信息管理系统[通俗易懂]基于javaweb的ssm学校教务管理系统(管理员,教师,学生)文章结构一、开发框架及业务方向1.开发环境2.开发框架3.整体业务二、项目结构及页面展示1.项目整体结构2.用户页面3.管理员页面***需要源码的加企鹅:671033846;备注CSDN即可******文章结构一、开发框架及业务方向1.开发环境操作系统不限:java特性,一套代码,导出运行jdk版本不限:推荐jdk1.8tomcat版本不限:推荐Tomcat8.0数据库mysql:版本不限,推荐mysql8.0以下开发工具:e

    2022年10月16日
    3
  • Vs下 CCriticalSection::Lock 异常错误的发生「建议收藏」

    Vs下 CCriticalSection::Lock 异常错误的发生「建议收藏」自己在vs下写了一个用 CCriticalSection::Lock来锁定对象的程序,发现给Lock设置dword参数时总会出现异常,后来查看了一下函数的文档,才恍然大悟!!!CCriticalSection类包含成员函数锁定的线程可用于获得一个关键部分对象的所有权。有两个版本的锁定功能没有参数和其他采用DWORD参数之一。后一种版本的锁定文档状态dword值参数指定

    2022年7月20日
    15

发表回复

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

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