动态规划01背包算法详解
动态规划算法核心思想:
将大的问题转化为小问题进行解决。
01背包问题:
01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的重量为W1,W2至Wn,与之相对应的价值为V1V2至Vn。01背包是背包问题中最简单的问题。01背包的约束条件是给定几种物品,每种物品有且只有一个(这个与完全背包不同),并且有价值和重量两个属性。在01背包问题中,因为每种物品只有一个,对于每个物品只需要考虑选与不选两种情况。如果不选择将其放入背包中,则不需要处理。如果选择将其放入背包中,由于不清楚之前放入的物品占据了多大的空间,需要枚举将这个物品放入背包后可能占据背包空间的所有情况。
下面来详细描述背包问题:
题目:有一个背包,容量为4磅,现有如下物品
要求:
1)达到的目标为装入的背包的总价值最大,并且重量不出去背包重量。
2)要求装入物品不能重复。
思路解析:
利用动态规划算法每次便利到的第i个物品,根据w[i]和v[i]来确定是否要将物品放到背包中。给定n个物品,w[i]和v[i]表示第i个物品的中重量和对应的价值。v[i][j]表示在背包容量为j重量时,前i个物品所能放的最大值。
动态规划过程如填表过程:
1)先使v[0][j] v[j][0]为0这样做的目的是更好的对应下标做后续计算。
2)当只有吉他时,背包容量为1或者2、3、4磅时 只能装入吉他
3)当有吉他和音响时分析步骤:
if(音响的容量大于当前背包容量)
直接使用上一个单元格的重量
if(音响的容量不大于当前背包容量)
取(上一个单元格的值)与(新增商品价值+剩余重量最大价值)比较,将最大的填入表中。
动态规划01背包算法详解相关推荐
- 多重背包O(N*V)算法详解(——使用单调队列)
多重背包O(N*V)算法详解(--使用单调队列) 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网上关 ...
- 神经网络算法详解 01:人工神经网络基础
本文介绍了人工智能的发展历史,基本概念,应用领域:神经元模型,神经元的学习规则以及神经网络工作原理.本系列文章来自阿里云大学人工智能学习路线中的<神经网络概览及神经网络算法详解>课程. 系 ...
- 编辑距离算法详解:Levenshtein Distance算法——动态规划问题
目录 背景: 求编辑距离算法: 图解过程: C++代码如下: 总结: 背景: 我们在使用词典app时,有没有发现即使输错几个字母,app依然能给我们推荐出想要的单词,非常智能.它是怎么找出我们想要的单 ...
- 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?...
简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...
- 【强化学习】Policy Gradient算法详解
DeepMind公开课https://sites.google.com/view/deep-rl-bootcamp/lectures David Silver教程 http://www0.cs.ucl ...
- 目标检测 RCNN算法详解
原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...
- 回溯算法详解之全排列、N皇后问题
回溯算法详解 回溯算法框架.解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题: 1.路径:也就是已经做出的选择. 2.选择列表:也就是你当前可以做的选择. 3.结束条件:也就 ...
- 生物信息学(4)——多序列比对之CLUSTAL算法详解及C++实现
生物信息学系列博客索引 生物信息学(1)--双序列比对之Needleman-Wunsch(NW)算法详解及C++实现 生物信息学(2)--双序列比对之Smith-Waterman(SW)算法详解 生物 ...
- 离线强化学习(Offline RL)系列3: (算法篇) IQL(Implicit Q-learning)算法详解与实现
[更新记录] 论文信息:Ilya Kostrikov, Ashvin Nair, Sergey Levine: "Offline Reinforcement Learning with Im ...
最新文章
- linux(六)之文本操作
- 自定义Scrollview--实现仿淘宝Toolbar透明度渐变效果
- gson 自定义对象转换格式
- java学习笔记之折半查找法(二分法)
- XML基础教程(2)
- Codeforces 1206
- JS 控制RadioButtonList 获得上传文件类型后选中
- gRPC学习记录(二)--Hello World
- 0726------Linux基础----------线程池
- Rand函数使用和对补码的理解
- 数据不足,如何进行迁移学习?
- [收藏]Linux 常用命令
- 采用boost中的property_tree库操作json,xml(vs2008,unicode)
- windowskb2685811补丁_关于Win7/8.1 KB2685811、KB2685813和KB2670838蓝屏补丁下载汇总
- 机器视觉的四大类应用
- html 抽签分小组代码,javascript随机抽签程序
- 查询mysql校对集语句_mysql 查询时指定校对规则
- C语言中符号表示什么意思?
- 数据结构:满二叉树,完全二叉树,非完全二叉树 的区别
- mac 使用launchctl 开机时加速vim、emacs