回溯算法背包问题迭代c语言,回溯法解决0_1背包问题(迭代和递归)

问题:0/1背包问题

例子:weight数组代表物品重量,value数组代表物品价值,M代表背包容量。背包是按单位价值递减的顺序排列的,即value[i]/weight[i]>value[i-1]/weight[i-1].

const int weight[Max]={1,11,21,23,33,43,45,55};const int value[Max]={11,21,31,33,43,53,55,65};intM=110;迭代法的回溯分析:回溯法可以通过限界函数做剪枝处理。搜素的约束函数是总重量<=背包容量M.下面通过贪心算法确定限界函数,当前面k-1个物品已经做好装包决策,可能达到的最大效益值是该上界函数。// BackTrace_0_1backpack.cpp : 定义控制台应用程序的入口点。

//回溯法解决0/1背包问题;

#include "stdafx.h"

#include

#include

#include

using namespace std;

const int Max=8;

const int weight[Max]={1,11,21,23,33,43,45,55};

const int value[Max]={11,21,31,33,43,53,55,65};

//如果搜素算法在求解该节点之前已经知道目前的最优解大于这个界值的效益,就没有必要接着搜素下去。

//前k件物品是否装已经确定,还剩k+1,...,Max-1件未装

double BoundF(int cp, int cw, int k, int M)

{

double b=cp, c=cw;

int i;

for(i=k+1;i BackKnap(int M,double & fp)

{

vector X(Max),Y(Max);

int cw,cp,k;

fp=-1;//当前搜素的最优解,初始时设为-1

cw=cp=k=0;

do{

while(k=Max)

{

fp=cp;//

k=Max-1;//搜索到一个当前最好的结果时,保存在X中

for(int i=0;i=0&&Y[k]!=1)//回溯到第一个非零的节点

k--;

if(k<0) return X;//如果回溯到顶,说明已经遍历完所有结果

//下面是已经找到了第一个Y[k]=1的节点,将其设为0,更新cw,cp.再从该节点开始往下搜索

Y[k]=0;

cw=cw-weight[k];

cp=cp-value[k];

}

k++;

}while(1);

}

void show(int i)

{

cout

double fp;

X=BackKnap(M,fp);

for_each(X.begin(),X.end(),show);

cout<

a9ad58730a163e941acfbe3a7cf7ca5c.png递归的回溯没有考虑利用限界函数剪枝,仅根据约束条件遍历回溯。// Back_trace_0_1_backKnap.cpp : 定义控制台应用程序的入口点。

//

// BackTrace_0_1backpack.cpp : 定义控制台应用程序的入口点。

//回溯法解决0/1背包问题;

#include "stdafx.h"

#include

#include

#include

using namespace std;

const int Max=8;

const int weight[Max]={1,11,21,23,33,43,45,55};

const int value[Max]={11,21,31,33,43,53,55,65};

int M=110;//背包容量

int bestp=-1;//最优解

int bestx[Max];

vector x(Max);

// 已对前i-1个物品是否装入做好决策,对第i个物品装入的算法

void Backtrack(int i,int cp, int cw)//cp,cw是当前的背包内物品的重量和价值

{

int j;

if(i>=Max)//到达一个叶节点,说明得到一个可行解

{

if(cp>bestp)//如果这个解能达到更好的效益值,更新解的结果

{

bestp=cp;

for(i=0;i

8c5eb1299a7a453eafef3aace726f4b8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ISE应用入门的一些问题

1、怎样添加IP 2、怎样用modelsim调用IP生成的仿真文件。 今天用modelsim仿真ISE生成的DDR IP IP核的地址&#xff1a;E:\FPGA\MIS607\Mis607B\update\CH09_DDR_TEST\MiS607B_DDR3_Test\DDR3_Test\ipcore_dir\mig_ddr3_control\example_design\sim\functional 所以要把modelsim…

linux模块加载和模块卸载时出现的问题

在编写驱动程序的时候有时候会出现这种情况&#xff0c;模块加载之后不能卸载或卸载之后不能在加载&#xff0c;cat /proc/devices 后发现设备还占用着设备号&#xff0c;这种情况下&#xff0c;再次加载驱动模块肯定不会成功&#xff0c;必须重新启动才可以解决。最近仔细看书…

IDEA中中文乱码问题解决方案

1.修改idea安装目录下的两个文件 C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.4\bin\idea.exe.vmoptions C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.4\bin\idea64.exe.vmoptions 在这两个文件下增加一行: -Dfile.encodingUTF-8 2.做此修改后,tomcat运行日志会…

linux 6.2 期末考试题,redhat6.2-linux考试试卷(带部分答案)

这个是初学redhat6.2的考试内容,带答案(实做的,水平有限,不完整答案)--------------------------------------------------------------------------------------------装 订 线-----------------------------------------------------------------------------------------广东…

ios几个重要方法

加载类到内存&#xff0c;程序刚启动的时候调用&#xff0c;调用在main函数之前 1.(void)load{} 初始化类&#xff0c;类第一次使用的时候调用一次 2.(void)initialize{ } 控制器的视图架构&#xff0c;设置控制器的根view&#xff0c;重写该方法后&#xff0c;以该方法为主&am…

C++中extern “C”含义深层探索

1.引言 C语言的创建初衷是“a better C”&#xff0c;但是这并不意味着C中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言&#xff0c;C保留了一部分过程式语言的特点&#xff08;被世人称为“不彻底地面向对象”&#xff09;&…

video4linux 安装,【精品博文】Video4linux 下视频编程的流程

最近一直在忙基金申报&#xff0c;今天终于顺利提交了&#xff0c;剩下的就看缘分啦。今天有时间写写Video4linux 下视频编程的流程。Video4linux(简称 V4L),是linux 中关于视频设备的内核驱动。现在已有Video4linux2&#xff0c;还未加入linux 内核&#xff0c;使用的时候要自…

TVP5150真正的驱动起来了

几个注意的地方&#xff1a; 1、驱动TVP5150所需要的是IIC来驱动、IIC的时序一定要搞清楚、还有IIC的读写时序、 刚开始的时候并尝试从里面读寄存器、没有成功、可能有些寄存器不能读、2、硬件一定要检查清楚&#xff0c;TVP5150用到的电源有3.3V 1.8V、用电压表测量好、3、检查…

intellij IDEA--- 报inspects a maven model for resolution problems

解决方法是&#xff1a; 第一种&#xff1a; 找到pom.xml 右击 --> Maven --> reImport 第二种方法&#xff1a; 第三种 <properties><junit.version>4.11</junit.version><spring.version>4.3.14.RELEASE</spring.version></prop…

spring AOP自定义注解方式实现日志管理

转&#xff1a;spring AOP自定义注解方式实现日志管理 今天继续实现AOP&#xff0c;到这里我个人认为是最灵活&#xff0c;可扩展的方式了&#xff0c;就拿日志管理来说&#xff0c;用Spring AOP 自定义注解形式实现日志管理。废话不多说&#xff0c;直接开始&#xff01;&…

GPG96244QS1屏驱动难题

void Gpg_Master(unsigned int Data) {unsigned int temp 0b1000000000000000;Master_SCK1;ENABLE_244QS1();//初始化前使能片选_delay(10);DISABLE_244QS1();Master_SCK0; //Generate SCK Clockdo{Master_SDI Data &temp;Master_SCK1; _delay(10); Master_SCK0; //Gener…

ERROR 2384 — [ main] o.s.boot.SpringApplication : Application run failed

springboot数据库建表运行后报错&#xff1a; ERROR 2384 — [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘entityManagerFactory’ defined in class path res…

linux装机量,在没有盗版的世界 Linux桌面的装机量可能占比达到40%

近日&#xff0c;由奥斯陆大学经济学系博士生Arne Rogde Gramstad公布的“Software Piracy and Linux Adoption”研究报告&#xff0c;发现了Linux系统装机量和软件盗版之间的潜在关联。在这份报告中引用了商业软件联盟(BSA)自2012年以来从104 个国家收集的盗版软件信息&#x…

初识Paramiko

简介&#xff1a; paramiko是用python语言写的一个模块&#xff0c;遵循SSH2协议&#xff0c;支持以加密和认证的方式&#xff0c;进行远程服务器的连接。跟常用软件xshell 、xftp功能一样&#xff0c;但是可以连接多台服务器&#xff0c;进行复杂的操作。 安装 &#xff1a; p…

gpg96244qs1屏驱动起来了

驱动屏需要注意的地方&#xff1a; 1、首先一定要保证通信、当然电路图什么的肯定是确保是好的1.1 这个屏用的是SPI通信、验证通信的方法是读寄存器里面的一个默认值&#xff0c;如果读出来的是原来的默认值的话&#xff0c;就说明是正确的、用示波器看SPI线的数据线、有一个高…

Spring.io本地服务器解决超时问题

建本地服务器的方法&#xff0c;详情参考官方说明&#xff1a;https://github.com/spring-io/initializr 打开一看是英文&#xff0c;而且你鼓捣半天不一定成功&#xff0c;没事&#xff0c;我已经搭建好了可执行jar包给你下载使用&#xff01;你只需要java -jar&#xff0c;如…

lgg6 android 9,LG G6的18:9屏幕用起来到底是什么样

前不久LG公布了全新18:9屏幕&#xff0c;据他们称这块屏幕是特意为智能手机而设计&#xff0c;如今传言也指向LG G6将会成为首款使用这块屏幕的旗舰&#xff0c;那么为何LG会放弃智能手机坚持的16:9转而使用18&#xff1a;9&#xff0c;体验又会是什么样呢&#xff1f;最近LG公…

屏上有一层紫色(正在找原因)

注&#xff1a; 1、这两天一直在找这个原因、5150控制成功、屏驱动成功、可是为什么屏上面有一层紫色的覆盖住了呢、非常的让我感到不解2、如果什么也不输入、解码出来的信号在TFT上显示是紫色、我现在是不怎么清楚是屏的原因还是解码的原因

Cadence PCB SI

Cadence PCB信号完整性 (SI) 和电源完整性技术(PI)提供了可调整、高性价比并且支持前仿真和后仿真的系统互联设计和分析环境。 Cadence PCB信号完整性 (SI) 和电源完整性技术(PI)提供了可调整、高性价比并且支持前仿真和后仿真的系统互联设计和分析环境。Cadence PCB SI和PI产品…