代码随想录训练营Day33:完全背包问题2

2024-05-16 12:36

本文主要是介绍代码随想录训练营Day33:完全背包问题2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.322零钱兑换

与昨天的零钱兑换问题的区别主要不同点在于dp数组的含义,相同点都是属于组合问题。

1.dp数组的含义:dp[j]:代表容量为j时候的最少零钱个数

2.递推公式:dp[j] = min(dp[j],dp[j-coins[i]]+1);dp[j-coins[i]]+1 = dp[j - weight[i]]+value[i],所以还是属于一个变式。因为题目要求的是最小个数,所以得取min函数。

3.初始化:由于要取最小值,所以一开始初始化的时候不能设置为0,而是应该设置一个超过其对应范围的个数,可以是INT_32,也可以是10001因为题目中规定的范围是10000.但是dp[0] = 0,因为容量为0时放不进去零钱,所以为0.

4.因为这个题目里面需要的是最小的个数,这属于组合问题里面的一个叶子节点,所以遍历方式是先遍历种类再遍历容量。

class Solution {
public:int coinChange(vector<int>& coins, int amount) {sort(coins.begin(),coins.end());//先排序vector<int> dp(amount+1,10001);//dp[i]:价格为i的时候的最小的硬币个数dp[0] = 0;for(int i = 0;i<coins.size();i++){for(int j = coins[i];j<=amount;j++){dp[j] = min(dp[j],dp[j-coins[i]]+1);}}//if(amount == 0) return 0;if (dp[amount] == 10001) return -1;return dp[amount];}
};

2.279完全平方数

1.dp数组的含义:dp[j]:代表容量为j时候的最少得完全平方数个数

2.递推公式:dp[j]= min(dp[j],dp[j-i*i]+1);dp[j-i*i]+1 = dp[j - weight[i]]+value[i],所以还是属于一个变式。因为题目要求的是最少个数,所以得取min函数。

3.初始化:由于要取最小值,所以一开始初始化的时候不能设置为0,而是应该设置一个超过其对应范围的个数,可以是INT_32,也可以是10001因为题目中规定的范围是10000.但是dp[0] = 0,因为容量为0时没有完全平方数,所以为0.

4.遍历顺序:因为这个题目里面需要的是最小的个数,这属于组合问题里面的一个叶子节点,所以遍历方式是先遍历种类再遍历容量。

整体下来和前面的类似。

class Solution {
public:int numSquares(int n) {vector<int> dp(n+1,10001);//dp[i]:容量为i的最少数量dp[0] = 0;for(int j = 1;j<=n;j++){for(int i = 1;i*i<=n;i++){if(j>=i*i)dp[j]= min(dp[j],dp[j-i*i]+1);}}return dp[n];}
};

3.139单词拆分

1.dp数组的含义:dp[j]:容量为j的时候能否被拆分

2.递推公式:分三种情况:1.当dp[j-m](m为需要匹配的那个字典的长度)为false的时候直接返回false.2.当和这一段出现false的时候,结果为false。3.当dp[j-m]为true的同时这一段也能匹配,结果为true,然后break,代表这个长度可以匹配成功。

3.初始化:默认情况下为true,但是dp[0]为true.保证递推能够正常进行下去。

4.遍历顺序:这是属于完全背包下面的排列问题(因为要考虑顺序),所以是先遍历容量再遍历物品。

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {int n = s.size();//这个应该是一个排列的问题,是需要考虑顺序的,所以应该先遍历容量vector<bool> dp(n+1,false);//dp[i]:长度为i的是否能够被找到dp[0] = true;//初始化for(int j = 1;j<=n;j++){//遍历背包容量for(auto& word:wordDict){//遍历物品int m = word.size();if(j >= m){if(dp[j-m] == false){//如果前面那个是false,那么直接返回falsedp[j] = false;continue;}bool ischeck = true;for(int k = 0;k<m;k++){//用来判断这一段是否能够匹配if(s[j-m+k]!=word[k]){ischeck = false;break;}}if(ischeck == true){//代表这一段匹配了,递推公式dp[j] = true;break;//找到了之后,后面的就不需要再找了}else{dp[j] = false;}}}}return dp[n];}
};

这篇关于代码随想录训练营Day33:完全背包问题2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994926

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造