背包问题:

原始的0-1背包

任务描述

又快到了寒假时间,说到寒假,免不了出去玩耍,小蒋今天要去郊游,她想带点零食去,但是她的包包大小有限,所以她需要在n个零食中挑选若干零食装入包包,最多能装多满?假设包包的大小为m,每袋零食的大小为A[i]


样例

如果有4个零食大小是[2, 3, 5, 7]。 如果包包的大小为11,可以选择[2, 3, 5]装入背包,最多可以装满10的空间。 如果包包的大小为12,可以选择[2, 3, 7]装入背包,最多可以装满12的空间。


测试说明

平台会对你编写的代码进行测试:

测试输入: 11 2 3 5 7

预期输出: 10

对于背包问题,有

01背包的状态转移方程为//i代表对i件物体做决策,有两种方式—放入背包和不放入背包。
j表示当前背包剩余的容量。
f[i][j](表示在第i 个物体,第j个容量情况下的最大价值)= max(f[i - 1][j], f[i - 1][j - w[i]] + v[j])

w[i]表示物体i的重量,v[i]表示物体i的价值

这里会做一个判断,比较f[i-1][j],f[i-1][j-w[i]]+v[j],比较哪种情况下价值更大,然后选取价值更大的一个。

for (int i = 1; i <= n; i++)
{for (int j = V; j >= 0; j--){if (j >= w[i])//如果背包装得下当前的物体{f[i][j] = max(f[i - 1][j], f[i - 1][j - w[i]] + v[i]);}else//如果背包装不下当前物体{f[i][j] = f[i - 1][j];}}
}

可以发现如下问题:
(1)状态表f的遍历顺序为从第1行开始一行一行遍历,且在遍历第i行时候不会用到第i-2行数据,也就是i-2行及以前的数据没有用了,可以清除。同时,第i-1行的数据每个只会用到一次。
(2)遍历每一行时候只用到当前容量j和j-w[i]的数据,也就是第 i 次遍历只需要 第 i-1 次遍历中容量小于等于 j 的数据 。

所以我们可以按照如下方法优化f的空间复杂度:

f[j] = max(f[j], f[j - w[i]] + v[j])
for (int i = 1; i <= n; i++)
{for (int j = V; j >= w[i]; j--){  f[j] = max(f[j], f[j - w[i]] + v[i]); }
}

else 可以省去(不用自己给自己赋值)

从本质上说,这种优化方法针对了上述的两个问题:
(1)把遍历第i个物体和遍历第i-1个物体时的最大价值存在一个单元里。更新前f[j]存i-1的价值,更新后f[j]存i的价值。因为用不到i-2及以前的数据所以不需要存。因为以后不会再用到i-1的价值所以被覆盖了没问题
(2)j从背包容量V开始遍历,即从大到小遍历,保证了当前f[j]和f[j - w[i]]里面存的是i-1的数据,即等价于f([i])[j] = max(f([i - 1])[j], f([i - 1])[j - w[i]] + v[i]),从而和优化空间复杂度前状态转移方程的原理一致。

程序设计实践-第8关:205_背包相关推荐

  1. 湘潭大学2022软件工程程序设计实践平时练习一C/C++

    第1关:101_求最长的公共字符串 任务描述 系统会给出两个字符串,你需要获取到这两个数据(方法同从键盘获取一样),并找到他们最长的公共字符串,并且将他们的长度打印. 样例 输入ABCD,CBCE 返 ...

  2. Akka应用模式:分布式应用程序设计实践指南pdf

    下载地址:网盘下载 对于想要学习Akka的Java 和 Scala 开发者们,有很多技术资源可供参考,但是如要想知道如何去应用这些技术就需要不同的思维方式了.为了帮助你正确地使用Akka,<Ak ...

  3. python语言程序设计实践教程答案实验六_Python程序设计实践教程

    书名:Python程序设计实践教程 定价:29.8 ISBN:9787115532602 作者:储岳中 薛希玲 版次:*1版 出版时间:2020-04 内容提要: 本书是Python语言程序设计的配套 ...

  4. c语言程序设计实践教程课,C语言程序设计实践训练教程

    计算机实践训练课程是程序设计课程中必不可少的一个环节.目的是训练读者综合运用该课程的知识与技巧的能力,达到理论联系实际.学以致用. 本书是与<C语言程序设计教程>和<C语言程序设计实 ...

  5. c语言程序设计实践课选题,c语言程序设计实践实验题目

    c语言程序设计实践实验题目 绥化学院程序设计实践实验报告范例 参考1实验题目:循环结构程序设计实验目的:1.熟悉 VC++6.0 的运行环境,掌握 C 程序的执行方法:2.掌握三种基本数据类型.部分运 ...

  6. c语言做一个小程序报告,《C语言程序设计实践》课程报告30个小程序组合成一个大程序.doc...

    北方民族大学 课 程 报 告 课 程 名 称: 程序设计实践 专 业 班 级 : 软件工程(2)班 学 生 姓 名 : 李思良 学 号 : 任 课 教 师 : 王晓锋 学 期 : 2015-2016学 ...

  7. python程序设计实践教程答案-Python程序设计实践教程

    书名:Python程序设计实践教程 定价:29.8 ISBN:9787115532602 作者:储岳中 薛希玲 版次:*1版 出版时间:2020-04 内容提要: 本书是Python语言程序设计的配套 ...

  8. 桂林理工大学 程序设计实践课程 实习报告

    学  号: 320205205# 桂林理工大学 GUILIN UNIVERSITY OF TECHNOLOGY    程序设计实践课程      实习报告 学      院: 信息科学与工程学院 # ...

  9. 迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践(1)

    迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践 0.相关文章 1.导入所使用的包 2. 定义迷宫 3.定义迷宫动作 4.策略参数θ转换为行动策略π 5.定义随机移动函数 6.定义使智 ...

最新文章

  1. 链接被点击的默认行为——带到另一个窗口
  2. MIT+IBM同时利用AI探索神经科学,让脑科学研究如虎添翼
  3. Redhat、CentOS进单用户模式进行维护
  4. 屏蔽预训练模型的权重。 只训练最后一层的全连接的权重。_权重/参数初始化...
  5. html怎么在图片上加文字_怎么把图片文字转换成word文档
  6. android 自定义库,Android自定义Log库
  7. 1748. 唯一元素的和
  8. 遇到一个Linux系统文件被删除后仍占用磁盘的问题
  9. RedHat Linux下Samba配置(简单配置)-转
  10. nodejs后台系列--第四篇--koa(二)
  11. 上传新文件项目到svn上
  12. web端实现类微信的语音播放效果
  13. 全新版大学英语综合教程第三册学习笔记(原文及全文翻译)——8 - A Clone Is Born(克隆生命诞生了)
  14. vs2010背景图片配置方法
  15. JavaScript对象的声明及操作
  16. 基于STM32设计智能称重系统(华为云IOT)
  17. 精选腾讯出品的 16 款小程序
  18. Design the Web: Add a Twitter Timeline 设计网页:添加Twitter时间轴 Lynda课程中文字幕
  19. 电话机器人源码和系统部署
  20. HBuilder下载

热门文章

  1. Vue element中select下拉框支持手输搜索也支持下拉选择
  2. 机械革命X6ti安装Ubuntu和NVIDIA的显卡驱动
  3. Ozone OM服务的HA配置搭建
  4. 《淘宝店铺经营管理一册通》一一1.7 淘宝店铺经营管理一册通
  5. Python写直角三角形以及倒直角三角形
  6. LR算法在申请评分卡的应用的理论
  7. 运用scheme协议唤起外部app
  8. matlab 生成静音文件,如何设置静音音频文件
  9. codeforces 962C Make a Square
  10. 2008年度(第二届)中国软件生产力风云榜获奖单位及个人揭晓