【算法训练记录——Day41】

news2025/1/19 2:57:22

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.coloradmin.cn/o/1894753.html

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

相关文章

(十三)MipMap

MipMap概念 滤波 采样 mipmap级别判定 问题&#xff1a;opengl如何判定应该使用下一级的mipmap呢&#xff1f; 通过glsl中的求偏导函数计算变化量决定 手动实现mipmap原理 1、生成mipmap的各个级别 2、修改vertexShader使得三角形随着时间变小 **** 需要更改Filter才能…

如何在操作使用ufw设置防火墙

UFW&#xff08;简单防火墙&#xff09;是用于管理iptables防火墙规则的用户友好型前端。它的主要目标是使iptables的管理更容易。 在学习Linux的时候大家一般都会关心命令&#xff0c;Posix API和桌面等&#xff0c;很少会去了解防护墙。其实除了一些网络安全厂商提供的付费防…

Zabbix 配置MySQL数据库监控

Zabbix MySQL数据库监控简介 通过 Zabbix 监控 MySQL 数据库&#xff0c;可以获取有关数据库性能、运行状况和资源使用情况的详细信息&#xff0c;帮助及时发现和解决问题。 Zabbix官方提供了一个名为MySQL by Zabbix agent的监控模板&#xff0c;该模板专为 Zabbix 通过 Zabb…

波动方程 - 在三维图中动态显示二维波动方程的解就像水面波澜起伏

波动方程 - 在三维图中动态显示二维波动方程的解就像水面波澜起伏 flyfish 波动方程的求解结果通常不是一个单一的数值&#xff0c;而是一个函数或一组函数&#xff0c;这些函数描述了波随时间和空间的传播情况。具体来说&#xff0c;波动方程的解可以是关于时间和空间变量的…

技术驱动旅游创新!深度解析景区导览小程序的地图渲染与AR导航技术

随着现代生活节奏的加快&#xff0c;人们在外出旅游时更倾向于轻便出行&#xff0c;携带导览地图已成为过去。然而&#xff0c;面对景区广阔的面积和众多景点&#xff0c;游客常常感到迷茫&#xff0c;难以快速定位到自己所需的地点。景区导览小程序让游客只需搜索景区名称&…

PyQT: 开发一款ROI绘制小程序

在一些基于图像或者视频流的应用中&#xff0c;比如电子围栏/客流统计等&#xff0c;我们需要手动绘制一些感兴趣&#xff08;Region of Interest&#xff0c;简称ROI&#xff09;区域。 在这里&#xff0c;我们基于Python和PyQt5框架开发了一款桌面应用程序&#xff0c;允许用…

谷粒商城学习笔记-05-项目微服务划分图

文章目录 一&#xff0c;商城业务服务-前端服务二&#xff0c;商城业务服务-后端服务三&#xff0c;存储服务四&#xff0c;第三方服务五&#xff0c;服务治理六&#xff0c;日志七&#xff0c;监控预警系统1&#xff0c;Prometheus2&#xff0c;Grafana3&#xff0c;Prometheu…

TSINGSEE智能分析网关V4人员区域徘徊AI检测:算法原理介绍及技术应用场景

一、引言 在现代社会&#xff0c;随着科技的不断发展&#xff0c;视频监控系统已广泛应用于各个领域&#xff0c;如公共安全、商业管理、交通监控等。其中&#xff0c;区域徘徊检测算法作为一种重要的视频分析技术&#xff0c;能够有效地识别出特定区域内人员的徘徊行为&#…

LLMs之gpt_academic:gpt_academic的简介、安装和使用方法、案例应用之详细攻略

LLMs之gpt_academic&#xff1a;gpt_academic的简介、安装和使用方法、案例应用之详细攻略 目录 gpt_academic的简介 1、版本更新历史 版本: 1、新增功能及其描述 新界面&#xff08;修改config.py中的LAYOUT选项即可实现“左右布局”和“上下布局”的切换&#xff09; 所…

SpringBoot开发细节

1.✨前后端时间不一致 解决方法1&#xff1a;在实体类属性上添加 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss", timezone "GMT8")解决方法2&#xff1a;springboot配置文件中 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT82.定义返回…

电商数据仓库

1.数据仓库的数据来源为业务数据库&#xff08;mysql&#xff09; 2.通过sqoop将mysql中的业务数据导入到大数据平台&#xff08;hive&#xff09; 3.通过hive进行数据计算和数据分析 形成数据报表 4.再通过sqoop将数据报表导出到mysql 5.使用FineReport制作数据报表 1.数据…

开始尝试从0写一个项目--后端(一)

创建文件的目录结构 利用这个界面创建 序号 名称 说明 1 SEMS maven父工程&#xff0c;统一管理依赖版本&#xff0c;聚合其他子模块 2 sems-common 子模块&#xff0c;存放公共类&#xff0c;例如&#xff1a;工具类、常量类、异常类等 3 sems-pojo 子模块&#x…

前端Debugger时复制的JS对象字符转JSON对象

前端debugger时&#xff0c;复制的对象在控制台输出时是如下格式&#xff0c;需要转换为对象格式来进行验证操作 bridgeId : 4118 createBy : null createTime : "2023-03-24 10:35:26" createUserId : 1 具体实现代码&#xff1a; // 转换transform (text) {l…

数据库表导出到excel:前置知识3 项目封装的Quartz实现动态定时任务

参考网址 目标&#xff1a;定时任务持久化到数据库&#xff0c;动态调整数据库里保存的cron表达式使定时任务可以跟随变化。 从SYS_QUARTZ_JOB表(通过反射创建任务)和SYS_QUARTZ_LOG表(主要就是记录日志)构建两个对应的实体类&#xff1a;QuartzJob和QuartzLog 1.看表结构 …

云计算【第一阶段(26)】Linux网络设置

一、查看网络配置 1.查看网络接口信息ifconfig 查看所有活动的网络接口信息 2.ifconfig命令 查看指定网络接口信息 ifconfig 网络接口 &#xff08;1&#xff09;第一行&#xff1a;以太网卡的名字 ens33其中en代表以太网卡&#xff0c; centos6的是eth0&#xff0c; e…

什么是数字体验成熟度,以及数字成熟度的模型计算和实现方法

“开发成功的全渠道数字身份&#xff0c;并通过无缝的数字体验吸引广泛的受众。无论您身在何处&#xff0c;都可以加速数字化转型并促进业务增长。通过直观、全面的工具&#xff0c;并了解您个人的数字体验成熟度水平&#xff0c;超越不断增长的客户期望并超越竞争对手。今天就…

第二十条:与抽象类相比,优先选择接口

要定义多种实现的类型&#xff1a;JAVA有两种机制&#xff1a;接口和抽象类。这两种机制都支持为某些实例方法提供实现&#xff0c;但二者有个重要的区别&#xff1a;要实现由抽象类定义的类型&#xff0c;这个类必须是抽象类的子类。因为Java只允许单继承&#xff0c;对抽象类…

2025年中国国际新能源汽车技术零部件及服务展览会

中国国际新能源汽车技术零部件及服务展览会&#xff0c;从设计到制造、从使用到服务&#xff0c;精准“链”接新能源汽车全产业链的技术供应商和汽车制造商&#xff0c;专业面向新能源造车供应链的行业盛会。2024展会回顾&#xff1a;在展会的3天里&#xff0c;有62家车企核心供…

如何自动筛选螺丝不良品?

四角螺丝是一种特殊设计的螺丝&#xff0c;其螺纹头部呈四个平行的角状结构&#xff0c;与传统的六角螺丝相比具有独特的外观和功能。这种设计使得四角螺丝在安装和拆卸时更容易使用&#xff0c;并提供了更好的扭矩传递效率。四角螺丝头部呈现四个平行的角&#xff0c;与常见的…

Web前端开发——HTML快速入门

HTML&#xff1a;控制网页的结构CSS&#xff1a;控制网页的表现 一、什么是HTML、CSS &#xff08;1&#xff09;HTML &#xff08;HyperText Markup Languaqe&#xff1a;超文本标记语言&#xff09; 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了…