【算法日志】动态规划刷题:01背包问题,多重背包问题(day37,day38)

news2025/4/17 18:56:37

代码随想录刷题60Day


目录

前言

目标和(01背包)

一和零(01背包)

零钱兑换(多重背包)

排列总和(多重背包)


前言

这两天都是背包问题,其中的01背包的一些应用问题需要一定的数学建模能力,需要i将实际问题简化成我们熟悉的背包问题;而这两天的多重背包问题还算比较基础,但也要我明白了动态规划中dp数组遍历顺序的重要性与决定性。


目标和(01背包)

	int findTargetSumWays(vector<int>& nums, int& S)
	{
		int sum = 0;
		const int size = nums.size();
		for (int i = 0; i < size; ++i)
			sum += nums[i];
		if (sum < abs(S))
			return 0;
		if (S < 0)
			S *= -1;
		if ((S + sum) & 1)return 0;
		int target = (S + sum) / 2;
		vector<int> dp(target + 1, 0);
		dp[0] = 1;
		for (int i = 0; i < nums.size(); ++i)
		{
			for (int j = target; j >= nums[i]; --j)
			{
				dp[j] += dp[j - nums[i]];
			}
		}
		return dp[target];
	}

一和零(01背包)

 

	int findMaxForm(vector<string>& strs, int m, int n) 
	{
		vector<vector<int>> nums;
		for (int i = 0; i < strs.size(); ++i)
		{
			if (strs[i].size() > (m + n))continue;
			int zero = 0;
			int one = 0;
			for (int j = 0; j < strs[i].size(); ++j)
				if (strs[i][j] == '0')
					++zero;
				else
					++one;
			if (zero <= m && one <= n)
				nums.push_back({ zero, one });	
		}
		vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));
		for (int i = 0; i < nums.size(); ++i)
		{
			int cZero = nums[i][0], cOne = nums[i][1];
			for (int j = n; j >= cOne; --j)
				for (int k = m; k >= cZero; --k)
					dp[j][k] = max(dp[j][k], dp[j - cOne][k - cZero] + 1);
		}
		return dp[n][m];
	}

零钱兑换(多重背包)

	int change(int amount, vector<int>& coins)
	{
		const int size = coins.size();
		vector<int> dp(amount + 1, 0);
		dp[0] = 1;
		for (int i = 0; i < size; ++i)
			for (int j = coins[i]; j <= amount; ++j)
				dp[j] += dp[j - coins[i]];
		return dp[amount];
	}

排列总和(多重背包)

int combinationSum4(vector<int>& nums, int target)
	{
		const int size = nums.size();
		vector<int> dp(target + 1, 0);
		dp[0] = 1;
		for (int i = 0; i <= target; ++i)
			for (int j = 0; j < size; ++j)
			{
				if (nums[j] <= i && (dp[i] < INT_MAX - dp[i - nums[j]]))
					dp[i] += dp[i - nums[j]];
			}
		return dp[target];
	}

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

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

相关文章

迈步从头越——同为科技(TOWE)22周年庆典活动圆满举行

8月23日&#xff0c;同为科技&#xff08;TOWE&#xff09;迎来公司成立22周年纪念日&#xff0c;这是属于TOWE品牌的又一里程碑时刻。从2001到2023&#xff0c;从产品到品牌&#xff0c;从技术到服务&#xff0c;同为科技&#xff08;TOWE&#xff09;始终秉承着专注于终端设备…

电子合同9问9答,君子签为您答疑解惑

随着互联网的发展&#xff0c;人们交易行为的改变、电子合同的推广&#xff0c;买卖合同、租房合同、采购合同、劳动合同、招投标文件等都开始在线上签署。签署过程中&#xff0c;君子签针对大家的一些疑虑&#xff0c;整理了相关解答。 1、 签电子合同时&#xff0c;如何确…

MMEdu库的下载和安装(Python版)

为保证程序的顺利运行&#xff0c;这里提供MMEdu库的下载安装包。 OpenXLabEdu开源资源&#xff1a;OpenXLabEdu帮助文档 — OpenXLabEdu 文档 现MMEdu一键安装包已升级为XEdu一键安装包&#xff0c;下文提到的MMEdu文件&#xff0c;应理解为XEdu一键安装包。 第一步&#x…

融合算法综述

融合算法 前言一、概念二、原理三、融合的先决条件四、融合分类4.1、前融合和后融合4.2 、数据级融合、特征级融合和决策级融合 五、典型融合算法 多传感器信息融合&#xff08;Multi-sensor Information Fusion,MSIF&#xff09;&#xff1a;利用计算机技术将来自多传感器或多…

小红书旅游种草笔记:如何打造爆款内容,吸引万千粉丝?

随着社交媒体的飞速发展&#xff0c;小红书作为国内知名的分享平台&#xff0c;已经成为越来越多人展示生活、交流心得的阵地。在众多分类中&#xff0c;旅游种草笔记尤为热门&#xff0c;吸引了大量用户关注。那么&#xff0c;如何在这片竞争激烈的红海中&#xff0c;打造出爆…

Spring Boot:让你轻松掌握自动装配的奥秘

Spring Boot是基于Spring框架开发的一种应用框架&#xff0c;它通过自动装配机制&#xff0c;大大简化了Spring应用的开发和部署&#xff0c;使开发者可以更加专注于业务逻辑的实现&#xff0c;而无需过多关注Bean的实例化和装配过程。本文将从以下几个方面介绍Spring Boot的自…

计算机竞赛 基于RSSI的室内wifi定位系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; wifi室内定位系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;…

掌握这20条你将超过90%的测试员

1、不断学习 不管是“软技能”&#xff0c;比如公开演讲&#xff0c; 或者编程语言&#xff0c;亦或新的测试技术&#xff0c;成功的软件测试工程师总是会从繁忙中抽出时间来坚持学习。 2、管理你的时间 我们的时间很容易被大块的工作和不断的会议所占据&#xff0c;导致我们…

数据库mysql导入导出数据需要注意的问题,作者只有600~800个表的处理经验

文章目录 一、新建数据库的时候编码和排序规则尽量和原数据库完全一样二、表结构和表数据分开导入&#xff0c;不要同时导入Navicat导出表结构Navicat导入表结构Navicat导出表数据Navicat导入表数据 三、编码问题四、执行顺序的问题五、迁移数据大小和速度的问题六、数据库分区…

element-ui中的el-table的summary-method(合计)的使用

场景图片&#xff1a; 图片1&#xff1a; 图片2&#xff1a; 一&#xff1a;使用element中的方法 优点&#xff1a; 直接使用summary-method方法&#xff0c;直接&#xff0c;方便 缺点&#xff1a; 只是在表格下面添加了一行&#xff0c;如果想有多行就不行了 1&#xff1a;h…

成都瀚网科技:抖店如何经营?

作为热门的短视频分享平台&#xff0c;抖音不仅是一种娱乐工具&#xff0c;更是一个蕴藏着无限商机的电商平台。开店、抖音下单成为很多人的选择。那么&#xff0c;抖音如何开店、下单呢&#xff1f; 1、如何在抖音上开店和下单&#xff1f; 注册账号&#xff1a;首先&#xff…

Java调用高德地图API根据经纬度获取区县

在开发中&#xff0c;有时候需要根据经纬度来获取对应的区县信息&#xff0c;这可以通过调用高德地图的API来实现。本篇文章将介绍如何使用Java代码调用高德地图API来根据经纬度获取区县信息。 前提条件 首先&#xff0c;你需要注册一个高德地图开发者账号&#xff0c;并获取…

如何做好作品集?告诉你这7个技巧

又到了一年一度的求职季&#xff0c;无论你是毕业生、专业人士还是自由职业者&#xff0c;一个高质量的个人作品集都是你的第一块垫脚石。作品集的制作是你工作能力的缩影&#xff0c;也是面试官认识你的第一站。制作一个作品集需要展示你的广度、技能和经验&#xff0c;甚至是…

17.3 【Linux】systemctl 针对 service 类型的配置文件

17.3.1 systemctl 配置文件相关目录简介 服务的管理是通过 systemd&#xff0c;而 systemd 的配置文件大部分放置于/usr/lib/systemd/system/ 目录内。但是 Red Hat 官方文件指出&#xff0c; 该目录的文件主要是原本软件所提供的设置&#xff0c;建议不要修改&#xff01;而要…

如何获取Ck

1. 下载via浏览器 https://viayoo.com/zh-cn/ 2.打开via浏览器, 登录美团外卖 美团网账号登录-手机美团官网 3.点击左上角的盾牌 然后点击这里 最后去我的网站粘贴就行

肽在化妆品中的应用是怎样的呢?

传统的化妆品功能原料多为化学合成或植物提取&#xff0c;而近几年以来明显的往生物美容和基因美容方面发展&#xff0c;肽类的原料和成品非常的活跃&#xff0c;其活性成分的小分子肽是由一定序列的多个氨基酸组成。自然界中生物体内多数生物反应和进化过程在一定程度上是由特…

(学习笔记-调度算法)内存页面置换算法

在了解内存页面置换算法前&#xff0c;我们得先了解 缺页异常&#xff08;缺页中断&#xff09;。 当 CPU 访问的页面不在物理内存中时&#xff0c;便会产生一个缺页中断&#xff0c;请求操作系统将缺页调入到物理内存。那它与一般的中断主要区别在于: 缺页中断在指令执行 [期…

netapp fas存储更换故障硬盘

在机房查看SSN的 位置示意图 SSH连接集群管理IP&#xff0c;使用以下命令采集日志&#xff0c;将输出内容保存为txt文件&#xff0c;发给400 使用Putty通过SSH访问设备IP 链接后&#xff0c;输入用户名&#xff0c;密码 进入命令行界面&#xff0c;搜集日志 ::> syst…

c++(8.24)拷贝赋值对象,匿名对象,友元,常成员和常对象,mutable关键字,运算符重载

作业&#xff1a; 实现关系运算符重载&#xff08;仅>,<,&#xff09;&#xff1a; #include <iostream>using namespace std;class Person {int a;int b;friend bool operator (const Person &L,const Person&R); public:Person(){}Person(int a,int b)…

【PostGreSQL】PostGreSQL到Oracle的数据迁移

项目需要&#xff0c;有个数据需要导入&#xff0c;拿到手一开始以为是mysql&#xff0c;结果是个PostGreSQL的数据&#xff0c;于是装数据库&#xff0c;但这个也不懂呀&#xff0c;而且本系统用的Oracle&#xff0c;于是得解决迁移转换的问题。 总结下来两个思路。 1、Postg…