第四十五天 | 322.零钱兑换

题目:322.零钱兑换

尝试解答:

1.确定dp[j]含义:装满容量为j的背包所需要放的硬币个数为dp[j];

2.动态转移方程:dp[j] = dp[j - coins[i]] + 1;

3.遍历顺序:本题应该为组合类题目,不考虑装入的顺序,只在乎硬币个数

        所以先物品后背包,背包容量从小到大。(错)

4.初始化:dp[0] = 1,其余均初始换为0

5.打印dp

代码实现如下,有漏洞,执行不对:

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, 0);dp[0] = 1;int result = INT_MAX;for(int i = 0; i < coins.size(); i++){for(int j = coins[i]; j <= amount; j++){// dp[j] = dp[j - coins[i]] + 1;// result = min(dp[j], result);if(j == amount){result = min(dp[j], result);}}}return result;}
};

正确思路:

1.确定dp[j]含义:装满容量为j的背包所需要最少放的硬币个数为dp[j];

2.动态转移方程:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);

        本轮要放的物品重量为coins[i],所以背包必须腾出coins[i]这么大的容量留给coins[i],所以之前背包装的重量必须是dp[j - coins[i]]。装了coins[i]后,一共装了dp[j - coins[i]] + 1块硬币,与不装coins[i] 的情况比大小,取其小,得到本轮循环的最优解,就是本次的最少个数。

3.初始化:

        本题初始化比较取巧,之前不管是排列还是组合,dp[0]都初始化为了1,但这到题从测试样例中可以看出,dp[0] = 0。

        其他位置的值如何进行初始化?从本质入手,因为是取其小,必须将他们初始化为INT_MAX,才可以保证在二维数组的第一行可以成功更改值,不会被原来初始化的值覆盖(解释这一点时我习惯从二维数组的角度出发)。

        其实道理和其他题目中,初始化为0的道理是一样的,其他题目如果是取其大max,则初始化为0,只要没有负数的情况,就可以保证能够更新值,不会被覆盖。

4.遍历顺序:

        本题对遍历顺序无要求。

        首先要分清楚题目类型:本题是求装满背包的最少个数,不是求装满背包有多少种方法,

所以这道题和排列组合无关,对遍历顺序无特殊要求。

        只有题目问“方法数”时,才考虑排列还是组合,先背包还是先物品。

5.打印dp

代码如下:

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX);dp[0] = 0;for(int i = 0; i < coins.size(); i++){      //遍历物品for(int j = coins[i]; j <= amount; j++){     //遍历背包if(dp[j - coins[i]] != INT_MAX){dp[j] = min(dp[j - coins[i]] + 1, dp[j]);}}}if(dp[amount] == INT_MAX) return -1;return dp[amount];}
};

对于返回-1的条件不是很理解。

循环里的判断条件:如果dp[j - coins[i]] != INT_MAX,那么是不可能通过目前遍历到的物品将背包装满的。

返回值时进行的判断:如果dp[amount] == INT_MAX,那么不可能将背包装满。

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

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

相关文章

精品PPT | 精益生产管理中MES系统的实现与应用(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 MES系统的实现与应用 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&…

吃掉 N 个橘子的最少天数(Lc1553)——记忆化搜索

厨房里总共有 n 个橘子&#xff0c;你决定每一天选择如下方式之一吃这些橘子&#xff1a; 吃掉一个橘子。如果剩余橘子数 n 能被 2 整除&#xff0c;那么你可以吃掉 n/2 个橘子。如果剩余橘子数 n 能被 3 整除&#xff0c;那么你可以吃掉 2*(n/3) 个橘子。 每天你只能从以上 …

Redis - 缓存场景

学习资料 学习的黑马程序员哔站项目黑马点评&#xff0c;用作记录和探究原理。 Redis缓存 缓存 &#xff1a;就是数据交换的缓冲区&#xff0c;是存储数据的临时地方&#xff0c;读写性能较高 缓存常见的场景: 数据库查询加速&#xff1a;通过将频繁查询的数据缓存起来&…

【挖金子game】

如果您想要编写一个简单的“挖金子”游戏代码&#xff0c;可以使用Python这样的编程语言来实现。以下是一个简单的Python代码示例&#xff0c;用于创建一个基本的“挖金子”游戏&#xff1a; import random # 游戏设置 max_gold 10 # 最大金子数量 max_digs 5 # 最大挖掘…

数据驱动(Data-Driven)和以数据为中心(Data-Centric)的区别

一、什么是数据驱动&#xff1f; 数据驱动&#xff08;Data-Driven&#xff09;是在管理科学领域经常提到的名词。数据驱动决策&#xff08;Data-Driven Decision Making&#xff0c;简称DDD&#xff09;是一种方法论&#xff0c;即在决策过程中主要依赖于数据分析和解释&…

Java基础学习:java中的基础注解

在Java中&#xff0c;有一些内置的&#xff08;或称为“基础”&#xff09;注解&#xff08;annotation&#xff09;&#xff0c;这些注解在Java标准库中定义&#xff0c;并且具有特定的用途。以下是一些主要的Java内置注解&#xff1a; Override&#xff1a; 用于表示一个方法…

Keras深度学习框架第二十七讲:KerasTuner超参数优化基础

1、超参数优化概念 1.1 什么是超参数优化 超参数调优&#xff0c;也称为超参数优化或参数调优&#xff0c;是寻找学习算法或模型最佳超参数组合的过程。超参数是在训练过程开始之前设置的参数&#xff0c;模型无法直接从数据中学习这些参数。它们控制着学习算法的行为&#x…

NDIS小端口驱动开发(二)

初始化微型端口适配器 当网络设备可用时&#xff0c;系统会加载所需的 NDIS 微型端口驱动程序。 随后&#xff0c;即插即用 (PnP) 管理器向 NDIS 发送即插即用 IRP 来启动设备。 NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数来初始化用于网络 I/O 操作的适配器。 初…

嵩山为什么称为三水之源

三水指黄河、淮河、济河&#xff0c;这三条河流环绕在嵩山周边。 黄河横亘在嵩山北部&#xff0c;其支流伊洛河从西南方环绕嵩山&#xff0c;然后汇入黄河。济河&#xff0c;古称济水&#xff0c;源自济源王屋山&#xff0c;自身河道在东晋时代被黄河夺占&#xff0c;从此消失。…

毕设 大数据校园卡数据分析

文章目录 0 前言1 课题介绍2 数据预处理2.1 数据清洗2.2 数据规约 3 模型建立和分析3.1 不同专业、性别的学生与消费能力的关系3.2 消费时间的特征分析 4 Web系统效果展示5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设…

职场不是挣钱

职场怎么不是挣钱&#xff1f; 曾经我也一直这么想&#xff0c;只要做好老板安排的事情&#xff0c;自然就可以挣到钱了。 目的应该是没错的&#xff0c;是挣钱。 只是做好活就能挣钱&#xff0c;好像想得有些简单了。 毕竟每个人都在干活&#xff0c;为什么就该自己挣钱呢&a…

【vue2配置】Vue Router

Vue Router官网 1、npm install vue-router4 2、创建模块&#xff0c;在src目录小创/views/map/MapIndex.vue模块和创router/index.js文件 3、在router/index.js配置路由 import Vue from "vue"; import Router from "vue-router"; // 引入模块 const Ma…

C语言——在头⽂件中#if、_STDC_等字⾏起什么作⽤?

一、问题 通常&#xff0c;⼀些程序员都不会去研究头⽂件中的内容是什么含义&#xff0c;总觉得乱乱的&#xff0c;有很多 #if、_STDC_、#line 等字符&#xff0c;那么这些字符都各代表什么呢&#xff0c;在头⽂件中又起到什么作⽤呢&#xff1f; 二、解答 在头⽂件中存在类似…

智慧校园建设的进阶之路

智慧校园的建设现已到达了老练的阶段&#xff0c;许多学校设备充满着数字化信息&#xff0c;进出宿舍楼&#xff0c;校园一卡通体系会记载下学生信息&#xff0c;外来人员闯入会报警&#xff0c;翻开电脑就能查到学生是否在宿舍等……学生的学习和日子都充满了数字化的痕迹。但…

C# WPF入门学习(三)

目录 核心架构 核心组件和概念 1. XAML&#xff08;eXtensible Application Markup Language&#xff09; 2. 依赖属性&#xff08;Dependency Properties&#xff09; 3. 路由事件&#xff08;Routed Events&#xff09; 4. 数据绑定 5. 命令&#xff08;Commands&…

itertools内置模块的过滤妙用

itertools内置模块的妙用 过滤源迭代器中的元素 Python内置itertools模块里有一些函数可以过滤源迭代器中的元素。 islice islice可以在不拷贝数据的前提下&#xff0c;按照下标切割源迭代器。可以只给出切割的终点&#xff0c;也可以同时给出起点和终点&#xff0c;还可以…

MongoDB 覆盖索引查询:提升性能的完整指南

MongoDB 覆盖索引查询是一种优化数据库查询性能的技术&#xff0c;它通过创建适当的索引&#xff0c;使查询可以直接从索引中获取所需的数据&#xff0c;而无需访问实际的文档数据。这种方式可以减少磁盘 I/O 和内存消耗&#xff0c;提高查询性能。 基本语法 在 MongoDB 中&a…

SQL练习题:2.4

建表 # 学生表 create table t_student (stu_id varchar(10),stu_name varchar(10),stu_age datetime,stu_sex varchar(10) );# 课程表 create table t_t_course (c_id varchar(10),c_name varchar(10),c_teaid varchar(10) );# 教师表 create table t_t_teacher (tea…

光速入门python的OpenCV

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理python的OpenCV模块的关键知识点 争取用最短的时间入门OpenCV 并且做到笔记功能直接复制使用 OpenCV简介 不浪费时间的介绍: 就是类似于ps操作图片。 至于为什么不直接用ps&#xff0c;因为只有程序能…

【找出满足差值条件的下标 I】python

目录 暴力题解 优化&#xff1a;滑动窗口维护大小值 暴力题解 class Solution:def findIndices(self, nums: List[int], indexDifference: int, valueDifference: int) -> List[int]:nlen(nums)for i in range(n):for j in range(n-1,-1,-1):if abs(i-j)>indexDiffere…