首页 > 其他分享 >[动态规划-背包问题入门] 原理,运用,实战

[动态规划-背包问题入门] 原理,运用,实战

时间:2023-05-03 17:56:13浏览次数:45  
标签:实战 背包 入门 int weights https dp cn

背包问题 -- 动态规划经典类型

动态规划是将问题细分为有限个小问题并通过递推或递归来求得最终值。具象化来说,就是对某一问题的答案,我们转化为dp[n],而对于0 <= i < ndp[i][j] 的值会根据前后上下的相关值来变化(i.e. dp[i-1][j]dp[i][j-1])。注意这时算法强调的不是【容量】,而是【上下文】,即当遍历到第i个对象时,根据对象i有无被包含的情况来判断是否更新dp[i][j]

而背包问题则是强调了【容量】,即给定一个固定大小的背包,算法需要在有限的空间找出最优解。这就和上下文失去了联系,对于任意对象i,假设其重量为weights[i],目前最大重量为j,则dp[i][j] = dp[i-1][j-weights[i]] + weights[i]dp[i][j]就是在最大重量为j的时候带上对象i的最大重量,注意这个前提是j - weights[i]>=0

相似地,二维数组中dp[i][j]只与dp[i-1]一行相关,因此可以进行空间优化,将dp数组优化为一维数组。这也是很多动态规划问题中可选的优化方式。

运用

下面这段伪代码大概展示了如何用代码解决背包问题,当然根据具体的情况,会有很大的调整,比如内外循环的选择,dp[j]取值的选择等等。

int backpack(vector<int>& weights, int maxWeight):
  create dp(weights.size() + 1); // 包括一个dp[0]作为边界
  for j = 1 -> n {
    for each item:
	if weights[item] <= j:
	  // 背包需要空出存放item的位置
	  dp[j] = weights[item] + dp[j-weights[item]]
  return dp[n];

实战

标签:实战,背包,入门,int,weights,https,dp,cn
From: https://www.cnblogs.com/Akira300000/p/17369458.html

相关文章

  • appuploader 入门使用
    回想一下我们发布iOS应用,不仅步骤繁琐,非常耗时。一旦其中一步失误了,又得重新来。作为一名优秀的工程师不应该让这些重复的工作在浪费我们的人生。在软件工程里面,我们一直都推崇把重复、流程化的工作交给程序完成。这次的文章主角就是为了解放我们而来——appuploader,appuploade......
  • appuploader 入门使用
     回想一下我们发布iOS应用,不仅步骤繁琐,非常耗时。一旦其中一步失误了,又得重新来。作为一名优秀的工程师不应该让这些重复的工作在浪费我们的人生。在软件工程里面,我们一直都推崇把重复、流程化的工作交给程序完成。这次的文章主角就是为了解放我们而来——appuploader,appupl......
  • 01 入门
    一、OpenGL1.核心模式与立即渲染模式早期的OpenGL使用立即渲染模式(Immediatemode,也就是固定渲染管线),OpenGL的大多数功能都被库隐藏起来。从OpenGL3.2开始,规范文档开始废弃立即渲染模式,并鼓励开发者在OpenGL的核心模式(Core-profile)下进行开发。2.扩展Extension当一个显......
  • three.js 入门学习(一)
    webGl和three.jshttp://webgl3d.cn/pages/aac9ab/图形学算法Web3DWebGPU下载yarnaddthree@types/three使用import*asTHREEfrom'three';onstscene=newTHREE.Scene();仅导入你所需要的部分import{Scene}from'three';一个初始化的demo场景、相机......
  • 【2023 · CANN训练营第一季】昇腾AI入门Pytorch
    昇腾AI全栈架构华为AI全栈全场景解决方案为4层,分别为芯片层、芯片使能层、AI框架层和应用使能层。芯片基于统一、可扩展架构的系列化AIIP和芯片,为上层加速提供硬件基础。芯片产品:昇腾310和昇腾910的独立芯片,Nano-Tiny-Lite的非独立芯片。Ascend层,一切集成电路的核心,主要作用......
  • XXL-JOB 入门学习
    参考教程主要参考了xxl-job快速入门指南,写的很详细,可以一步步按教程的走。项目环境搭建下载项目先到xxl-jobGitHub地址下载RELEASE的ZIP包。解压后,到MySQL执行doc目录下的db文件。视图页面打开xxl-job-admin模块。然后修改application.properties配置的......
  • Volatility 3 使用入门笔记
    下载恶意软件分析诀窍和工具DVD和vol3下载地址:https://codeload.github.com/ganboing/malwarecookbook/zip/refs/heads/master然后,下载vol3,并安装:https://codeload.github.com/volatilityfoundation/volatility3/zip/refs/heads/stable最初运行的时候,pythonD:\Application\v......
  • [网络安全]AntSword蚁剑实战解题详析
    免责声明:本文仅分享AntSword渗透相关知识,不承担任何法律责任。请读者自行安装蚁剑,本文不再赘述。蚁剑介绍蚁剑(AntSword)是一款开源的跨平台WebShell管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。中国蚁剑的特点主要有如下几点:1.支持多平台......
  • [网络安全]BurpSuite爆破实战解题详析之BUUCTF Brute 1
    免责声明:本文仅分享AntSword渗透相关知识,不承担任何法律责任。请读者自行安装BurpSuite,本文不再赘述。在用户名和密码都未知的情况下,进行用户名、密码的组合爆破,效率极低。先爆破用户名,再利用得到的用户名爆破密码,将提高爆破速度。BUUCTFBrute1题目操作Burp抓包单独......
  • CMake 入门实战
    CMake入门实战本仓库是CMake入门实战的源代码。为了方便githubpages无法正常阅读的朋友,下面也附带上正文。但为了您更好的阅读体验,不妨前往原博客阅读:https://hahack.com/codes/cmake。什么是CMakeAllproblemsincomputersciencecanbesolvedbyanotherle......