算法笔记-动态规划-1

本文介绍了01背包问题,将其转化为动态规划问题,并详细阐述了解决方法,包括回溯法和动态规划法。动态规划通过五个步骤进行,首先确定dp数组含义,然后确定递推公式,接着初始化dp数组,确定遍历顺序,最后推导dp数组。文章还探讨了如何优化动态规划,使用一维dp数组作为滚动数组来节省空间。
摘要由CSDN通过智能技术生成

01背包

问题介绍

标准的01背包问题是指,有n(int型)个物品和最多装重量W(int型)的背包。weight数组表示物品的重量,即weight[i]表示第i个物品的重量;value数组表示物品的价值,即value[i]表示第i个物品的价值。问把哪些物品装入背包使得物品价值总和最大,每个物品只能装一次。

举例1,假设背包重量为4,物品信息由表格描述:

重量 价值
物品0 1 15
物品1 3 20
物品2 4 30

问题转化

如果遇到的问题符合01背包的特点,可以思考是否能转化为01背包问题

  • 每个物品(元素)只能使用一次
  • 背包刚好装满
  • 放入的物品(元素)重量为元素的数值,价值也为元素的数值

求解方法

回溯法

每个物品要么取,要么不取,用回溯法搜索所有情况,时间复杂度O(2^n)

动态规划

用动态规划方法,以五个步骤来解决问题。以下都是针对例子1用二维dp数组描述

第一步确定dp数组含义

dp数组如图所示
在这里插入图片描述
dp[i][j]表示从

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值