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

【算法|动态规划No.31 | 01背包问题】01背包模板题

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
在这里插入图片描述

原题链接:点击直接跳转到该题目

目录

  • 1️⃣题目描述
  • 2️⃣题目解析
  • 3️⃣解题代码

1️⃣题目描述

有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。

第 i 件物品的体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。

在这里插入图片描述

2️⃣题目解析

状态表示:

  • dp[i][j] 表示从前i个物品中进行挑选,体积不超过j的情况下的最大价值。

状态转移方程:

  • dp[i][j] = max(dp[i - 1][j],dp[i - 1][j - v[i] + w[i])

注意:这里dp[i - 1][j]的情况是一定存在的;而dp[i - 1][j - V[i]] + W[i]的情况只有在j >= V[i]时才会存在。

空间优化:注意填dp表时需要从右往左填。

3️⃣解题代码

解法1(朴素算法:二维dp)

#include<iostream>
#include<algorithm>
using namespace std;const int N = 1010;
int V[N],W[N],dp[N][N];int main()
{int n,v;cin >> n >> v;for(int i = 1;i <= n;i++) cin >> V[i] >> W[i];for(int i = 1;i <= n;i++){for(int j = 1;j <= v;j++){dp[i][j] = dp[i - 1][j];if(j - V[i] >= 0) dp[i][j] = max(dp[i][j],dp[i - 1][j - V[i]] + W[i]);}}cout << dp[n][v] << endl;return 0;
}

解法2(滚动数组空间优化):

#include<iostream>
#include<algorithm>
using namespace std;const int N = 1010;
int V[N],W[N],dp[N];int main()
{int n,v;cin >> n >> v;for(int i = 1;i <= n;i++) cin >> V[i] >> W[i];for(int i = 1;i <= n;i++)for(int j = v;j - V[i] >= 0;j--)dp[j] = max(dp[j],dp[j - V[i]] + W[i]);cout << dp[v] << endl;return 0;
}
http://www.lryc.cn/news/210250.html

相关文章:

  • Azure - 机器学习:使用 Apache Spark 进行交互式数据整理
  • 4.5 final修饰符
  • Clickhouse数据库部署、Python3压测实践
  • 探索控制领域:从电视遥控器到自动驾驶【基础概念理解、应用实例】
  • 在R中安装CmdStanR的步骤-R4.3.1-CmdStanR-0.6.1.900
  • 安信可小安派AiPi 代码下载
  • 程序化交易(二)level2行情数据源接入
  • 4.6 static修饰符
  • C++头文件定义变量
  • [蓝桥杯-610]分数
  • Vue指令大全:深入探索Vue提供的强大指令功能
  • x210项目重新回顾之十七升级到linux4.19.114 +buildroot2018再讨论
  • shell_56.Linux永久重定向
  • CN考研真题知识点二轮归纳(1)
  • hadoop使用简介
  • WebSocketClient objects are not reuseable
  • 分享54个ASP.NET源码总有一个是你想要的
  • 闭包通俗解释,Demo(Go Java Python)
  • Linux部署Redis Cluster高可用集群(附带集群节点添加删除以及槽位分配操作详解)
  • 【PWN · heap | Off-By-One】Asis CTF 2016 b00ks
  • C++STL---Vector、List所要掌握的基本知识
  • 使用FastAPI部署Ultralytics YOLOv5模型
  • A. Doremy‘s Paint 3
  • 深度学习_1 介绍;安装环境
  • Python基础入门例程19-NP19 列表的长度(列表)
  • LeetCode 2558. 从数量最多的堆取走礼物
  • 【JVM】字节码文件的组成部分
  • STM32 TIM(四)编码器接口
  • 力扣第56题 合并区间 c++ 贪心
  • php 日期