最优化原理

指的最优策略具有这样的性质:不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。

如何证明一个最优策略的子策略也是最优解,一般使用反证法来证明。


无后效性

指的是某状态下决策的收益,只与状态和决策相关,与到达该状态的方式无关。某个阶段的状态一旦确定,则此后过程的演变不再受此前各种状态及决策的影响。


将问题扩展到一般情况。为了实现这个目的,我们需要将问题进行抽象并建模,然后将其划分为更小的子问题,找出递推关系式,这是分治思想中很重要的一步。


问题1:

你只有一个容量有限的背包,总容量为c,有n个可待选择的物品,每个物品只有一件,它们都有各自的重量和价值,你需要从中选择合适的组合来使得你背包中的物品总价值最大。

为了求解这个问题,我们把这个问题用数学的方式表达出来。

n个可待选择的物品,重量分别为w1,w2,w3……wn;价值分别为v1,v2,v3……vn;

我们可以拿或者不拿这个物品,用x1,x2,x3……xn来表示是否拿取的操作。

对于数到其中的一个i,求解当前阶段中的最大价值maxV=max(v1x1+v2x2+...+vixi)

约束条件为w1x1+w2x2+...+wixi<Wi

定义函数 fun(i,j)当前容量为j的情况下,前i个物品的组合组成最大值。

有两种情况:

1背包已经装不下这个石头了,所以 fun(i,j) = fun(i-1,j)

2背包可以装下这个石头,但是并不一定是最优值。

如果不装的话fun(i,j) = fun(i-1,j)

如果装的话fun(i,j) = fun(i-1,j - wi) + vi

max(fun(i-1,j) , fun(i-1,j - wi) + vi)

问题到这里其实使用递归解法已经能解出答案了,但是在一些数据量非常大的时候会导致内存超出,为了解决这个问题——>

自上而下的解法与分治法的区别就是增加了一个数组用来存储计算的中间结果来减少重复计算。这里,我们只需要多定义一个二维数组。

采用自上而下填表法,可以发现很多计算是多余的,只需要在递归的过程中存储下计算的答案,就把问题的复杂度转化为了二维数组,空间复杂度为(n*c)。


问题2:

有N种物品和一个容量为T的背包,每种物品都就可以选择任意多个,第i种物品的价值为P[i],体积为V[i],求解:选哪些物品放入背包,可使得这些物品的价值最大,并且体积总和不超过背包容量。

完全背包的解题逻辑和01背包的解题逻辑差距只在(在选取第i个物体时,需要遍历当前剩余体积下选取几个第i个物体,选取几个第i个物品后的价值和当前剩余体积下所求解出的最大的值的和中挑选最大的值作为此子问题的最优解)

ks(i,t) = max{ks(i-1, t - V[i] * k) + P[i] * k}; (0 <= k * V[i] <= t)


问题3:

有N种物品和一个容量为T的背包,第i种物品最多有M[i]件可用,价值为P[i],体积为V[i],求解:选哪些物品放入背包,可以使得这些物品的价值最大,并且体积总和不超过背包容量。

ks(i,t) = max{ks(i-1, t - V[i] * k) + P[i] * k}; (0 <= k <= M[i] && 0 <= k * V[i] <= t)

解析多重背包的问题,其实和完全背包的问题很像,对比两个状态方程可以看到,区别仅仅在于k的取值范围上。

在计算量上来说,其实多重背包的计算过程比完全背包更短。


http://www.taodudu.cc/news/show-5675499.html

相关文章:

  • BZOJ3597: [Scoi2014]方伯伯运椰子
  • CAS server打包小白教程
  • 【义修换届大礼包】
  • 3597: [Scoi2014]方伯伯运椰子
  • 中国棕榈仁油和椰子油基天然脂肪酸市场趋势报告、技术动态创新及市场预测
  • 药用级椰子油行业调研报告 - 市场现状分析与发展前景预测
  • jetbrain IDE怎么卸载不显示code with me
  • 《websocket》websocket即时聊天
  • d简化默认构造器
  • Android(或者Java)通过HttpUrlConnection向SpringMVC请求数据(数据绑定)
  • linux下进程管理工具-supervisord
  • 八年级上册计算机知识点总结,八年级英语上册知识点归纳
  • 电脑工程师外企求职记
  • python第30讲数据挖掘_Python 中的实用数据挖掘
  • Java批量下载图片和写入文件
  • QML项目-ROSON课堂(仿腾讯游戏平台WeGame)
  • java 批量写入文件_Java批量写入文件和下载图片的示例代码
  • 简单工厂模式和抽象工厂模式
  • webScoket
  • 苹果系统(macos)code with me 控制端下载不下来,下载缓慢,解决办法
  • IDEA使用code with me来进行多人远程编程
  • lol服服务器维护算逃跑吗,英雄联盟掉线几分钟算逃跑
  • 人生博弈
  • 佛说:不要胡思乱想
  • 人生七苦
  • 佛说!
  • 佛说:“我爱你”
  • 人生中的得与失
  • 佛说十二因缘
  • 程序人生之二:十年 IT 生涯感情祭

01背包、完全背包和多重背包相关推荐

  1. 动态规划 背包问题小结 0-1背包(采药 九度第101题) 完全背包(Piggy-Bank POJ 1384) 多重背包(珍惜现在,感恩生活 九度第103题)

    本小结介绍0-1背包.完全背包以及多重背包问题 记忆要点: 0-1背包:二维数组情况下,顺序遍历体积或者倒序均可以                降维情况下需倒序遍历体积 完全背包:数组降维+顺序遍历 ...

  2. WikiOI 3269 混合背包 (动规+多重背包优化)

    3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 背包体积为V ,给出N个物品,每个物品 ...

  3. HDU2191 多重背包或者01背包 xingxing在努力

    珍惜现在, 感恩生活,记得汶川大地震那年我还在6年级, 当时以为是后面的同学在摇我的凳子, 几分钟后班里机智的同学才说地震了,大家赶快往楼下跑.这道题才让我真正理解了背包九讲前面讲解的东西, 题意就不 ...

  4. 背包问题(01背包,完全背包,多重背包(朴素算法二进制优化))

    写在前面:我是一只蒟蒻~~~ 今天我们要讲讲动态规划中~~最最最最最~~~~简单~~的背包问题 1. 首先,我们先介绍一下  01背包 大家先看一下这道01背包的问题   题目   有m件物品和一个容 ...

  5. 01背包输出路径、完全背包、多重背包

    背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...

  6. 背包问题详解:01背包、完全背包、多重背包

    参考链接: http://www.cnblogs.com/fengty90/p/3768845.html http://blog.csdn.net/mu399/article/details/7722 ...

  7. c++ 多重背包状态转移方程_【模板】各种背包问题amp;讲解

    [模板]各种背包问题&讲解  背包问题集合 一般来说,动态规划(DP)都是初学者最难闯过的一关,而在这里详细解说动态规划的一种经典题型:背包问题. 这里介绍的背包分为以下几种:01背包,完全背 ...

  8. hdu2844 Coins(普通的多重背包 + 二进制优化)

    看完背包九讲的多重背包之后,这题目应该可以轻松做出来了 模型: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的 ...

  9. C++ 背包问题——多重背包

    C++背包问题好久没更新了,过来讲一讲背包问题中的多重背包: 1.多重背包定义: 要想了解多重背包,首先要了解01背包(会的也看一看),多重背包就是在01背包的基础上,增加了物品的个数,这一点要区别于 ...

  10. 【dp - 多重背包】575: Coin Changing

    题目: http://acm.swust.edu.cn/#/problem/575/490 题目描述 设有n 种不同面值的硬币,各硬币的面值存于数组T[1:n]中.现要用这些面值的硬币来找钱.可以使用 ...

最新文章

  1. oracle aul 索引,ORACLE恢復神器之ODU/AUL/DUL
  2. Git 本地仓库管理
  3. 关于赠书《VS Code》断货延迟的通知!
  4. 3d人脸重建 facescape 测试
  5. python while循环语句-Python While 循环语句
  6. 4个月高效备考信息系统项目管理师经验分享【57,49,49】
  7. 如何分析EFCore引发的内存泄漏
  8. html asterisk 电话,Asterisk 常见问题
  9. 分布式系统架构师必须要考虑的四个方面
  10. javascript 内置对象学习 笔记:
  11. Windows7 环境下 VS2008 C++链接错误!
  12. hplus java,HPlus(H+) 后台管理模板带文档V 4.1.1-完整版
  13. 自媒体爆文神器——必备爆文写作工具
  14. win10 下mysql环境变量配置
  15. web前端简历怎么写?
  16. 计算机主板常见故障检修,主板常见故障检查与维修
  17. tracker使用_如何使用Tracker查找钥匙,钱包,电话或其他任何东西
  18. 思科NXOS系列交换机(N5K,N7K,N9K)和华为CE交换机配置比对
  19. GDAL 遥感 图像处理 锐化(Laplace算子、Sobel算子)
  20. SD卡驱动(基于XS128)

热门文章

  1. 装完系统还要装什么_系统下载、系统安装、安装完系统还要做什么
  2. [转载]钟茂森博士出家,净空老法师现场见证出家盛况_huadingjin_新浪博客
  3. NYOJ 845 无主之地1
  4. LIO Target介绍(一)
  5. 计算机系初中毕业女生,十大初中毕业女生热门专业
  6. c语言中应用程序错误,应用程序错误0xc0000022 浅析win10应用程序错误0xc0000022的应对办法...
  7. laydate 周_第13周动画数据周报|本王不愁嫁喜欢你的春夏秋冬火热上线
  8. photoshop常用操作
  9. 第一次赚钱经历,大三时录制在线课程,每月收入3千,生活费是够了?
  10. 远程计算机控制多台计算机,如何利用TeamViewer远程控制几台电脑