当前位置: 首页 > news >正文

【代码随想录day 35】 力扣 01背包问题 二维

视频讲解:https://www.bilibili.com/video/BV1cg411g7Y6/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html#%E6%80%9D%E8%B7%AF
力扣题目:https://kamacoder.com/problempage.php?pid=1046

这道题理解起来有点抽象。但是同其他动态规划的题一样,按步骤逐步分析

  1. 二维dp数组含义dp[i][j]:下标为0-i的物品任取,放进容量j的包里所能放的最大价值
  2. 递推公式:不放物品i时:dp[i - 1][j],放物品i时:dp[i - 1][j - weight[i]] + value(i),所以dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value(i))
  3. 初始化,dp[i][j]跟dp[i - 1][j] 和dp[i - 1][j - weight[i]]有关系,所以要初始化ij位置的左上角方向,即二维数组的最上一行和最左一列
  4. 遍历顺序,从上到下从左到右
    这里需要注意的是,容量j是可以装满的,因此对容量的遍历是从0-N左闭右闭区间,在动归的遍历过程中,如果j的容量不足以放入第i个物品,则继承dp[i - 1][j]的值。
#include <bits/stdc++.h>
using namespace std;int main()
{//初始化物品M种,总容量Nint M, N;cin >> M >> N;vector<int> value(M);vector<int> weight(M);for(int i = 0; i < M; ++i){cin >> weight[i];}for(int i = 0; i < M; ++i){cin >> value[i];}//1.二维dp数组含义dp[i][j]:下标为0-i的物品任取,放进容量j的包里所能放的最大价值vector<vector<int>> dp(M, vector<int>(N + 1, -1));//2.递推公式//不放物品i时:dp[i - 1][j]//放物品i时:dp[i - 1][j - weight[i]] + value(i)//所以dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value(i))//3.初始化,dp[i][j]跟dp[i - 1][j] 和dp[i - 1][j - weight[i]]有关系,所以要初始化ij位置的左上角方向,即二维数组的最上一行和最左一列//初始化最左一列,因为最左一列时背包空间为0的情况,所以初始化均为0for(int i = 0; i < M; ++i){dp[i][0] = 0;}//初始化最上一行,因为最上一行是只放物品0的情况,所以只要判断背包空间j是否能放下weight[0]即可,如果能放下则初始化为物品0的价值,如果放不下则初始化为0for(int j = 0; j <= N; ++j){//当背包容量大于等于第一个物品的weight时,初始化为第1个物品的valueif(j >= weight[0]){dp[0][j] = value[0];continue;}dp[0][j] = 0;}//4. 遍历顺序,从上到下从左到右for(int i = 1; i < M; ++i){//物品的容量是可以装满的,所以是由 0 - N 左闭右闭区间for(int j = 1; j <= N; ++j){//如果空间不够放第i个物品,即j < weight[i]则继承前一个dp的值if(j < weight[i]){dp[i][j] = dp[i - 1][j];}else{dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);}}}cout << dp[M - 1][N] << endl;return 0;}
http://www.dtcms.com/a/446610.html

相关文章:

  • 百度网盘怎么做网站友情链接交换平台免费
  • 网站模版亮点网站建设有关表格
  • 手机端网站制作教程合肥大型网站制
  • 鞍山高新区网站软文技巧
  • wordpress做物流网站网站建设合同书相关附件
  • 软件供应链风险预测实操指南——从SCA到SBOM 2.0的全流程落地
  • 免费网站排名优化在线产品营销推广方案
  • C语言-指针总结
  • 非小米电脑安装电脑管家实现互联互通
  • 怎样在网站上做外贸php网站开发环境说明
  • PostgreSQL 单库备份
  • 阳春做网站已有网站开发app客户端
  • 版面设计图大全长沙如何优化排名
  • 网站验证码文件厦门建设银行网站
  • 力扣hot100做题整理(31-40)
  • Oracle OCP认证考试题目详解082系列第54题
  • 淘宝客网站搜索怎么做湖南优化电商服务有限公司
  • 安阳市建设工程领域网站图片 移动网站开发
  • 掌握 Mock 的艺术:用 unittest.mock 优雅隔离外部依赖的单元测试实战指南
  • 哪些网站可以做兼职设计西安建设和住房保障局网站
  • 松江佘山网站建设南县网站设计
  • 网站备案号密码找回天水市住房和城乡建设局网站
  • php 8.4.6 更新日志
  • Linux处理停止信号相关函数的实现
  • 【学习笔记】Redis数据库设计与实现研究综述
  • 一键整合,万用万灵,Python3.11项目嵌入式一键整合包的制作(Embed)
  • 上海做网站品牌公司wordpress删除用户头像
  • 静态网站素材网站的尾页要怎么做
  • 有关房地产开发建设的网站ps制作博客网站界面
  • 蒙阴网站优化做俄罗斯外贸网站