文章目录

  • 1 定义
  • 2 例题
  • 3 压缩

1 定义

题目

有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。

基本思路

这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。

用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:

f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}

这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[i-1][v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c[i]的背包中”,此时能获得的最大价值就是f[i-1][v-c[i]]再加上通过放入第i件物品获得的价值w[i]。

优化空间复杂度

以上方法的时间和空间复杂度均为O(N*V),其中时间复杂度基本已经不能再优化了,但空间复杂度却可以优化到O(V)。

先考虑上面讲的基本思路如何实现,肯定是有一个主循环i=1…N,每次算出

python【数据结构与算法】01背包问题(附例题)相关推荐

  1. DAY 21冲击蓝桥杯——Python数据结构与算法01 时间复杂度

    是指算法的执行效率 算法的执行时间与算法的输入值之间的关系 for/while循环 O(n) 无循环 则为常量O(1) 常见时间复杂度案例分析: O(1): def O1(num):i=numj=nu ...

  2. 最全最详细数据结构与算法视频-【附课件和源码】

    源码和课件下载方式在文末 什么是数据结构与算法 算法用来设计并实现一种用计算机来解决问题的方法.它满足下列性质: 输入:有零个或多个输入量 输出:产生至少一个输出量 确定性:算法的指令清晰.无歧义 有 ...

  3. 数据结构背包问题c语言思路,【数据结构与算法】背包问题总结梳理

    背包问题总结分析 背包问题是个很经典的动态规划问题,本博客对背包问题及其常见变种的解法和思路进行总结分析 01背包 问题介绍 有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次. 第 i 件 ...

  4. 数据结构与算法总结——背包问题与组和问题

    数据结构与算法总结--背包问题与组和问题 数据结构与算法总结--背包问题与组和问题 1. 背包问题 2.背包问题的变形 3. 组和问题 总结 数据结构与算法总结--背包问题与组和问题 我觉得学习算法很 ...

  5. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  6. [FreeCodeCamp笔记] Python 数据结构和算法1 二分搜索 Binary Search

    我以前学过数据结构和算法(data structure and algorithms. 现在普遍简称DSA),当时用的Robert Sedgewick的coursera课程.这位大神写的<算法( ...

  7. Python天天美味(32) - python数据结构与算法之堆排序

    1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data):     for i in ran ...

  8. python数据结构与算法13_python 数据结构与算法 (13)

    python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...

  9. python leetcode_leetcode 介绍和 python 数据结构与算法学习资料

    for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...

  10. Python数据结构与算法(二)栈和队列

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

最新文章

  1. ICRA2021| 自动驾驶相关论文汇总
  2. WINCE5.0和WINCE6.0的内存与系统架构
  3. [HDU 1427]速度计算24点(DFS暴力搜索)
  4. 线性规划与网络流24题●09方格取数问题13星际转移问题
  5. 【数据结构与算法】之深入解析“排列硬币”的求解思路与算法示例
  6. shell日期处理函数
  7. Eclipse里修改SVN的用户名和密码
  8. 添加毛玻璃的两中方法
  9. Python爬虫(二十一)_Selenium与PhantomJS
  10. 罗永浩与银联合作直播,但因过程太流畅被网友调侃是录播
  11. 语言用pad流程图求和例题_易编玩初级课解析:如何用编程玩转流程图?
  12. hadoop中遇到的问题
  13. Linux下Gogs二进制安装配置
  14. 用 ABAP 新建本地 Excel 文件并写入数据试读版
  15. 基于切比雪夫多项式的简单GCN网络
  16. (转)中华英才网竞品分析报告2016
  17. 1125 Chain the Ropes
  18. 运营简史:互联网运营的20年发展与演变
  19. HTML学生个人网站作业设计:动漫网站设计——悬崖上的金鱼姬(5页) HTML+CSS 简单DIV布局网页模板代码
  20. 大一下c语言笔记本电脑,适合大一新生的笔记本电脑排行榜2020_大一新生适合什么笔记本电脑...

热门文章

  1. vector 指针 的指针
  2. 用于CUDA FFT的PyTorch包装器pytorch-fft
  3. Ubuntu创建新用户并增加管理员权限
  4. opencv读取手机摄像头
  5. 双边滤波算法的原理、流程、实现及效果
  6. 青龙羊毛——果园合集(快手+抖音)(教程)
  7. PMP-【第10章 项目沟通管理】-2021-2-16(220页-231页)
  8. html旋转墙壁效果,css3实现照片墙效果,鼠标悬浮时旋转放大并摆正
  9. java javaw javaws MC_java和 javaw 以及 javaws的區別
  10. 配置sctp_5G站点网优参数配置指导书