【算法训练记录——Day41】

Day41——动态规划Ⅲ

  • 1.理论基础——代码随想录
  • 2.纯01背包_[kamacoder46](https://kamacoder.com/problempage.php?pid=1046)
  • 3.leetcode_416分割等和子集

背包!!

1.理论基础——代码随想录

在这里插入图片描述
主要掌握01背包和完全背包
物品数量: 只有一个 —— 01背包;
无数个 —— 完全背包;
不同物品数量不同 —— 多重背包;
按组打包,每组最多选一个 —— 分组背包;

2.纯01背包_kamacoder46

题目描述:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大

思路:

  1. 暴力方法:所有物品只有两种状态,装或者不装,因此可以用回溯法搜索所有情况,然后选择
  2. 二维数组dp01背包:
    1. dp[i][j]表示容量为 j 的背包从前i件(0=<x<i)物品里随便装所取得的物品最大价值
    2. 当物品价值最大时,第i件物品如果不在背包里,那么dp[i][j] = dp[i-1][j];
      如果在背包里,dp[i][j] = dp[i-1][j-w[i]] + v[i];
      dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]);
    3. 初始化: 背包容量为0,价值为0;dp[i][0] = 0;
      从定义可知,i 从 1开始有意义, i > 0;
      补充:当 i= 0 时,因为i>0时,dp[i][j]都与dp[i-1][j]相关,因此需要初始化i= 0;如果 j < w[0],那么不用管,本来就放不进去,但如果 j > w[0],此时的dp[0][j]就需要置为v[0]了,因为第一个能放入背包。
    4. 顺序:i从1 ~ n,j 从 w ~ 0;
      先遍历物品和先遍历物品,都差不多
    5. dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]);
	#include <iostream>#include <vector>using namespace std;int main() {int M, N;cin >> M >> N;vector<vector<int>> item(M, vector<int>(2, 0));for(int i = 0; i < M; i++) {cin >> item[i][0];}for(int i = 0; i < M; i++) {cin >> item[i][1];}vector<vector<int>> dp(M, vector<int>(N + 1, 0));for (int j = item[0][0]; j <= N; j++) {dp[0][j] = item[0][1];}for(int i = 1; i < M; i++) {for(int j = 0; j <= N; j++) {if(item[i][0] > j) dp[i][j] = dp[i-1][j];else dp[i][j] = max(dp[i-1][j], dp[i-1][j-item[i][0]] + item[i][1]);}}cout << dp[M-1][N];return 0;}

方法二:一维数组
dp[i][j] = max(dp[i-1][j], dp[i-1][j-item[i][0]] + item[i][1])
可以用dp[i][j]来保存dp[i-1][j],从而转换成一维数组
dp[j] = max(dp[j], dp[j-w[i]+item[i][1]);

	#include <iostream>#include <vector>using namespace std;int main() {int M, N;cin >> M >> N;vector<vector<int>> item(M, vector<int>(2, 0));for(int i = 0; i < M; i++) {cin >> item[i][0];}for(int i = 0; i < M; i++) {cin >> item[i][1];}vector<int> dp(N + 1, 0);for(int i = 0; i < M; i++) {for(int j = N; j >= item[i][0]; j--) {dp[j] = max(dp[j], dp[j-item[i][0]] + item[i][1]);}}cout << dp[N];return 0;}

3.leetcode_416分割等和子集

在这里插入图片描述
思路:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

农作物生长环境的远程监控与智能调控

农作物生长环境的远程监控与智能调控 农作物生长环境的远程监控与智能调控技术&#xff0c;作为现代农业科技的核心组成部分&#xff0c;正逐步革新传统农业的生产模式&#xff0c;推动农业向精准化、智能化转型。这一技术体系综合应用了物联网、大数据、云计算以及人工智能等…

chrome 谷歌浏览器插件打包

1、找到id对应的字符串去搜索 C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data\Default\Extensions2、选择根目录 直接加载下面的路径扩展可用&#xff1a;

Python酷库之旅-第三方库Pandas(001)

目录 一、Pandas库的由来 1、背景与起源 1-1、开发背景 1-2、起源时间 2、名称由来 3、发展历程 4、功能与特点 4-1、数据结构 4-2、数据处理能力 5、影响与地位 5-1、数据分析“三剑客”之一 5-2、社区支持 二、Pandas库的应用场景 1、数据分析 2、数据清洗 3…

7月2日PythonDay1

阶段一阶段导学 测试人员为什么要学习编程&#xff1f; Python是一门快速增长的计算机编程语言 白盒测试、自动化测试、测试开发 为什么学习Python&#xff1f; 相对于其他编程语言更简单 语言开源并且免费 使用人群广泛 应用领域广泛 学习目标 掌握python基础语法&…

python库(2):Passlib库

1 Passlib简介 Passlib库就是一个强大的工具&#xff0c;专门用于密码的安全存储和验证。本文将介绍Passlib库的基本概念、功能和使用方法&#xff0c;帮助更好地理解和应用密码安全技术。 Passlib是一个用于密码加密、哈希和验证的Python库&#xff0c;它提供了多种密码哈希…

云桌面运维工程师

一 深信服驻场工程师 1 深信服AC、AF、AD、NGAF、WOC Atrust、WAF项目实施经验者优先考虑。 负责云桌面POC测试 部署和配置&#xff1a;设置云桌面基础设施&#xff0c;包括虚拟化平台、云桌面管理软件和相关组件。确保正确配置网络、存储和安全设置。 用户体验&#xff1…

论文解读——掌纹生成网络 RPG-Palm

论文&#xff1a;RPG-Palm: Realistic Pseudo-data Generation for Palmprint Recognition&#xff08;2023.7&#xff09; 作者&#xff1a;Lei Shen, Jianlong Jin, Ruixin Zhang, Huaen Li, Kai Zhao, Yingyi Zhang, Jingyun Zhang, Shouhong Ding, Yang Zhao, Wei Jia 链接…

阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?

6 月 27 日&#xff0c;全球知名的开源平台 Hugging Face 的联合创始人兼首席执行官 Clem 在社交平台激动宣布&#xff0c;阿里 Qwen2-72B 成为了开源模型排行榜的王者。 这是一件大好事&#xff0c;说明了我们在大模型领域从先前的追赶&#xff0c;逐渐走向了领导&#xff0c;…

不看后悔!国内AI大比拼的精彩看点全汇总

至2022年AI爆发后&#xff0c;在中国已催生了上千个AI产品。 这些产品涵盖了从头部大厂到高等院校&#xff0c;再到初创企业的广泛阵容。 如&#xff1a; 大厂&#xff1a;百度文心、阿里通义、腾讯元宝、字节豆包、讯飞星火等高校&#xff1a;清华大学、北京大学等初创&…

【问题解决】plt.show()画出来的图像只在pycharm右侧栏显示

问题情况如下&#xff1a; 画出的图只在右侧栏显示&#xff0c;而我们想弹出一个独立的窗口&#xff0c;拖动鼠标可以360度查看图像&#xff0c;还可以保存图片。 【 问题解决 】&#xff1a; File -> Settings ->Tools-> Python Scientific -> 将“Show plots i…

2024 AI工程师世界博览会

6月24日至6月27日在旧金山举行的 AI 工程师世界博览会是AI 从业者和爱好者的首要活动之一。本次年度会议展示了人工智能技术的最新进展&#xff0c;并提供了对行业趋势的宝贵见解。 模型不是壁垒 大型语言模型&#xff08;LLMs&#xff09;的快速发展是会议的中心主题。OpenAI…

字节码编程ASM之生成变量并sout

写在前面 本文看下如何通过asm生成变量并sout。 1&#xff1a;代码 直接看代码吧&#xff0c;注释很详细&#xff0c;有不懂的&#xff0c;留言告诉我&#xff1a; package com.dahuyuo.asmtest;import org.objectweb.asm.*; import org.objectweb.asm.commons.AdviceAdapt…

Oracle EBS PO采购订单预审批状态处理

系统版本 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题症状: 采购订单状态:预审批 采购订单流程报错如下: po.plsql.PO_DOCUMENT_ACTION_AUTH.approve:90:archive_po not successful - po.plsql.PO_DOCUMENT_ACTION_PVT.do_action:110:unexpected error in acti…

C++ 教程 - 08 文件操作与异常处理

文章目录 文件操作文件对象其他方法异常处理 文件操作 需要头文件 <iostream><fstream> 读取文件 ifstream obj; obj.open(const char* filename, std::in)写入文件ofstream obj; obj.open(const char* filename, std::out)读、写文件 fstream&#xff0c;包含了i…

Python 面试【★★★】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Matplotlib 简介

import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4]) plt.ylabel(some numbers) plt.show() 当使用plot只传入单个数组时&#xff0c;matplotlib会认为这是y的值&#xff0c;并自动生成长度相同&#xff0c;但是从0开始的x值&#xff0c;所以这里的x会自动生成为 [0,1,2,…

【代码随想录】【算法训练营】【第57天】 [卡码99]岛屿数量 [卡码100]岛屿的最大面积

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 57&#xff0c;周三&#xff0c;再ding一下~ 题目详情 [卡码99] 岛屿数量 题目描述 卡码99 岛屿数量 LeetCode类似题目200 岛屿数量 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#…

Android adb logcat日志过滤输出

Android adb logcat日志过滤输出 adb logcat 输出所有Android设备上的日志。 adb logcat *:Error 过滤输出日志级别只为Error的日志。 过滤某些标签或tag&#xff0c;依次执行: adb shell logcat grep | "你的标签或tag" Android Studio level过滤查看各个等级的日志…

销毁终结者:IT 采购必知:高效数据销毁服务 文件销毁 硬盘销毁 数据销毁 销毁

在 IT 领域&#xff0c;设备的更新换代是常态&#xff0c;但旧设备中残留的数据却可能成为企业的潜在威胁。为了保障企业的数据安全&#xff0c;专业的数据销毁服务不可或缺。 我们专注于提供高效的文件销毁、数据销毁和硬盘销毁服务&#xff0c;确保您的企业信息得到妥善处理…

JavaScript懒加载图像

懒加载图像是一种优化网页性能的技术&#xff0c;它将页面中的图像延迟加载&#xff0c;即在用户需要查看它们之前不会立即加载。这种技术通常用于处理大量或大尺寸图像的网页&#xff0c;特别是那些包含长页面或大量媒体内容的网站。 好处 **1. 加快页面加载速度&#xff1a…