给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应怎样选择装入背包的物品,使得装入背包中物品的总价值最大?

整个解的空间相当于一个二叉树,左边是0,代表不取这个物品,右边是1,代表取这个物品,然后进行dfs,回溯的时候改动。

注意,这里应该有两个剪枝,我这里仅仅写了一个。

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int n,TotCap,bestval;//物品的个数。背包的容量,最大价值
const int N=1000;
int val[N],w[N],x[N],bestx[N];//物品的价值,物品的重量。x[i]暂存物品的选中情况,物品的选中情况
void dfs(int i,int cv,int cw)
{  //cw当前包内物品重量,cv当前包内物品价值if(i>n)//结束{if(cv>bestval){bestval=cv;for(i=1;i<=n;i++) bestx[i]=x[i];}}else for(int j=0;j<=1;j++)  {x[i]=j;//取或者不取 if(cw+x[i]*w[i]<=TotCap)  {cw+=w[i]*x[i];cv+=val[i]*x[i];dfs(i+1,cv,cw);cw-=w[i]*x[i];cv-=val[i]*x[i];}}
}int main()
{int i;bestval=0; cout<<"请输入背包最大容量:"<<endl;;cin>>TotCap;cout<<"请输入物品个数:"<<endl;cin>>n;cout<<"请依次输入物品的重量:"<<endl;for(i=1;i<=n;i++) cin>>w[i];cout<<"请依次输入物品的价值:"<<endl;for(i=1;i<=n;i++) cin>>val[i];dfs(1,0,0);cout<<"最大价值为:"<<endl;cout<<bestval<<endl;cout<<"被选中的物品的标号依次是:"<<endl;for(i=1;i<=n;i++)if(bestx[i]==1) cout<<i<<" ";cout<<endl;return 0;
}

转载于:https://www.cnblogs.com/mfrbuaa/p/5091597.html

回溯法解0-1背包问题(王晓东算法例题)相关推荐

  1. 分枝定界法解0/1背包问题

    分枝定界法解0/1背包问题 关键词:分支定界.0-1背包 分枝定界法简介 分枝定界法按照树形结构来组织解空间,展开节点后,有两种策略: 策略一.把节点加入 FIFO 队列当中: 策略二.把节点加入到堆 ...

  2. 回溯法 —— 求解0/1背包问题(剪枝)

    0/1背包问题 题目描述: 有n个重量分别为w1,w2,-,wn的物品(物品编号为1~n),它们的价值分别为v1,v2,-,vn,给定一个容量为W的背包.设计从这些物品中选取一部分物品放入该背包的方案 ...

  3. python回溯法解9*9数独

    文章目录 前言 一.回溯法解数独代码 总结 前言 看了labuladong算法小抄里的回溯法,照着模板,加入自己的理解,用python做了个解9*9数独的回溯法,. 一.回溯法解数独代码 直接上代码: ...

  4. 回溯法,回溯法解装载问题

    一.回溯法有"通用的解题法"之称,可以系统的搜索一个问题的所有解或任一解.它在问题的解空间中按深度优先策略,从根节点出发,搜索解空间树.算法搜索至解空间树的任一节点时,先判断该节点 ...

  5. 回溯法解旅行商问题java,回溯法解旅行商问题 | 学步园

    第一次编写,格式写的比较混乱.先把源码上来吧.这个源码是模仿教材上的(本人学生一枚 ).分析过程在下面. #include using namespace std; class Traveling{ ...

  6. 分枝限界法求解0/1背包问题

    问题描述 有n个重量分别为{w1,w2,-,wn}的物品,它们的价值分别为{v1,v2,-,vn},给定一个容量为W的背包. 设计从这些物品中选取一部分物品放入该背包的方案,每个物品要么选中要么不选中 ...

  7. 动态规划法改进:用序偶法求0/1背包问题

    动态规划法改进:用序偶法求0/1背包问题 1.问题 2.方法 3.实现代码 序偶法求0/1背包问题(动态规划法改进版) by 孙琨SealSun at UCAS 2015.11.20 #include ...

  8. 回溯法解01背包问题(最通俗易懂,附C++代码)

    问题描述: 01背包问题是算法中的经典问题,问题描述如下: 对于给定的N个物品,第i个物品的重量为Wi,价值为Vi,对于一个最多能装重量C的背包,应该如何选择放入包中的物品,使得包中物品的总价值最大? ...

  9. 【算法分析】回溯法解数独(九宫格)算法

    这篇文章,是来详细介绍怎样写出一个算法,来解出所有的数独问题.算法的程序运行时间,缩减在了毫秒级别.等到这篇文章结束,我会抽时间写一篇文章,介绍如何生成一个随机的唯一解的数独问题.另外,为了做图形方便 ...

最新文章

  1. 基于Co-Attention和Co-Excitation的少样本目标检测 | NeurIPS 2019
  2. MySQL 导致 CPU 消耗过大,如何优化
  3. 智能车技术与实践_ROS入门
  4. 超市账单管理------之获取总记录数
  5. php crypt mysql password_使用PHP 5.5的password_hash和password_verify函数
  6. CSS3中的动画效果记录
  7. 2.1基本算法之枚举_1749数字方格
  8. 著名风投Greylock扩展基金局限 投资科技行业
  9. wpf控件样式管理示意图
  10. 微信小程序的总结(我学到了什么?我有了哪些成就?)
  11. 英国沦陷了!2014年英国婴儿名top10,穆罕默德意外夺魁
  12. 国内下载国外数据集(库)方案整理
  13. 网络安全实验室|网络信息安全攻防学习平台(基础关)
  14. Mysql教程(Windows)
  15. 千锋教育威哥学Java教程之Java基础学习路线
  16. ygomobile卡组下载网站_游戏王YGOMobile
  17. 2019中国大学生程序设计竞赛-女生专场(重现赛)
  18. 通达oa精灵的下载步骤_通达oa精灵app下载|通达oa精灵2018官方版下载_v2.12_9ht安卓下载...
  19. angular2跳转路由, 获取路由参数
  20. 爬取大众点评黄焖鸡米饭的数据

热门文章

  1. D3 Selections
  2. javacript IO
  3. 2021年量子计算机奖,中兴通讯携手中国移动共获“2021年未来网络领先创新科技成果”奖...
  4. python列表_Python列表列表的所有组合
  5. vSAN 6.7培训_第1章-Virtual SAN各版本功能介绍
  6. Java基础学习总结(150)——Caused by: java.net.SocketException 问题解决
  7. Maven学习总结(48)——利用wagon-maven-plugin插件自动化部署Jar包/war包到Linux远程服务器
  8. Mysql学习总结(15)——Mysql错误码大全
  9. 算法学习总结(1)——基本数据结构
  10. Java Web学习总结(4)——HttpServletResponse对象入门