代码随想录算法训练营 ---第四十五天

前言:

 昨天的题做过之后,今天的题基本上都很简单,但是要注重一下细节。

第一题:

简介:

动态规划五部曲:

1.确定dp数组的含义

   dp[i]:爬到有i个台阶的楼顶,有dp[i]种方法

2.确定dp公式

    i:可以看作本次的物品值

    j:可以看作背包容量

    dp[j] +=dp[j-i];

3.确定如何初始化dp数组

    dp[0] = 1;

4.确定如何遍历数组

   先遍历背包,再遍历物品(因为我们先迈一步再迈两步 还是 先迈两步再迈一步 是有区别的)

 for(int j=0;j<=n;j++){for(int i=1;i<=m;i++){if(j-i>=0)dp[j] +=dp[j-i];}}

5.打印数组,看是否正确

代码实现:

#include <iostream>
#include <vector>
using namespace std;int palou(int m,int n){vector<int> dp(n+1,0);dp[0] = 1;for(int j=0;j<=n;j++){for(int i=1;i<=m;i++){if(j-i>=0)dp[j] +=dp[j-i];}}return dp.back();
}int main(){int m,n;cin>>n>>m;cout<<palou(m,n);return 0;
}

第二题:

简介:

我认为本题的重点在于如何初始化dp数组,自己做时在那里吃了亏。

动规五部曲分析如下:

  1. 确定dp数组以及下标的含义

           dp[j]:凑足总额为j所需钱币的最少个数为dp[j]

     2.确定递推公式                                                                                                                                     递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);  如果放入就加一个金币,不放入就不加。

     3.dp数组如何初始化                                                                                                                              首先凑足总金额为0所需钱币的个数一定是0,那么dp[0] = 0;然后考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖。所以下标非0的元素都是应该是最大值。

代码如下:

vector<int> dp(amount + 1, INT_MAX);
dp[0] = 0;

  4.确定遍历顺序

        本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。所以本题并不强调集合是组合还是排列。如果求组合数就是外层for循环遍历物品,内层for遍历背包如果求排列数就是外层for遍历背包,内层for循环遍历物品所以本题的两个for循环的关系是:外层for循环遍历物品,内层for遍历背包或者外层for遍历背包,内层for循环遍历物品都是可以的!

5.举例推导dp数组

322.零钱兑换

dp[amount]为最终结果。 

代码实现:

    //dp[j]表示组成j 所需最少硬币个数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],dp[j-coins[i]]+1);        }}if(dp.back()==INT_MAX)return -1;elsereturn dp.back();}

第三题:

简介:

  本题和上一题十分相似,只不过我们在遍历时要注意完全平方数就是物品(可以无限件使用),凑个正整数n就是背包,问凑满这个背包最少有多少物品?这样本题是不是就很清晰了。

代码实现:

先遍历背包,再遍历物品

int numSquares(int n) {vector<int> dp(n + 1, INT_MAX);dp[0] = 0;for (int i = 0; i <= n; i++) { // 遍历背包for (int j = 1; j * j <= i; j++) { // 遍历物品dp[i] = min(dp[i - j * j] + 1, dp[i]);}}return dp[n];}

先遍历物品,再遍历背包

    int numSquares(int n) {if(n<4)return n;vector<int> dp(n+1,INT_MAX);dp[0] = 0;for(int i=1;i*i<=n;i++){for(int j=i*i;j<=n;j++){dp[j] =min(dp[j],dp[j-i*i]+1);}}return dp.back();}

总结:

今天使用感觉更加得心应手了,还需努力!

 

 

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

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

相关文章

常见指令的数据通路和执行过程

作此篇的原因是17年19题&#xff1a; 本题选A&#xff0c;做的时候总感觉不够通透&#xff0c;因此把这题涉及到的内容全部看了一遍&#xff0c;顿时没有那种朦胧感了 零、五段式流水线&#xff1a; 以下均为MIPS设定&#xff1a;指令长度为32位&#xff0c;主存按字节编址&a…

gpt是如何进行训练的?

原理 gpt就是一个类似于成语接龙的游戏&#xff0c;根据之前的n个字符&#xff0c;预测下一个字符&#xff0c;那么gpt的输入和输出是如何构造的呢&#xff1f;比如给一个句子如下&#xff1a; sentence&#xff1a;如何理解gpt的原理。 构造gpt输入输入&#xff1a; input&am…

Echarts 最简单创建柱状图

设置容器 <div ref"myChart" style"width: 500px; height: 500px;"> </div>mounted() {//document渲染完成this.draw()}draw() {const myChart this.$echarts.init(this.$refs.myChart)//初始化对象myChart.setOption({ //参数配置项title: …

探索接口测试:SOAP、RestFul规则、JMeter及市面上的接口测试工具

引言 在当今软件开发领域&#xff0c;接口测试扮演着至关重要的角色。随着系统变得日益复杂和互联&#xff0c;对于内部和外部接口的测试变得愈发关键。接口测试不仅仅是验证接口的正确性&#xff0c;更是确保系统的稳定性、安全性和性能优越性的关键一环。 本篇博客将带您深入…

自动化任务:探索 Shell 脚本的实际应用

引言 在前一篇文章中&#xff0c;我们学习了 Shell 脚本的基础知识和语法。现在&#xff0c;让我们深入探讨 Shell 脚本在自动化任务中的实际应用。Shell 脚本能够帮助我们批量处理文件、定时执行任务等&#xff0c;提高工作效率。 批量处理文件 场景介绍&#xff1a; 假设我…

一次简单的 Http 请求异常处理 (请求的 url 太长, Nginx 直接返回 400, 导致请求服务异常)

1 结论 按照惯例直接说结论。 后台服务 A 有一个 Http 接口, 代码如下: RequestMapping(value "/user", method RequestMethod.GET) public List<UserInfoVo> getUserInfoByUserIds(RequestParam(value "userIds") List<String> userIds…

[Linux]进程等待

文章目录 3.进程等待3.1什么是进程等待3.2为什么要进程等待3.3如何进行进程等待?1.wait2.waitpid2.1函数的讲解2.2status的理解2.3代码理解 3.4学后而思1.直接用全局变量获取子进程退出码可以吗?如下2.进程具有独立性 退出码是子进程的数据 父进程是如何拿到退出码的3.对内存…

云匣子 FastJson反序列化RCE漏洞复现

0x01 产品简介 云匣子是租户连接云资源的安全管理工具&#xff0c;帮助云租户更加安全、精细的管理云上的虚拟机、数据库等资源。 云安宝结合多年的运维和安全实践&#xff0c;将云上的运维和安全有机结合&#xff0c;实现对运维过程的事前规划、事中控制和 事后审计。在此之上…

Handler系列-prepareMainLooper在哪里调用的

ActivityThread的main方法里调用prepareMainLooper public final class ActivityThread {public static void main(String[] args) {Looper.prepareMainLooper(); //创建sMainLooperLooper.loop();} } prepareMainLooper创建了sMainLooper public final class Looper {priva…

Redis常见面试问题

1、Redis分布式锁是怎么实现的 Redis实现分布式锁的7种方案-CSDN博客 2、Redis分布式锁会有什么问题 Redis实现分布式锁的7种方案-CSDN博客 3、Redis有哪些操作时间复杂度不是O(1)&#xff1f; Redis有一些操作的时间复杂度不是O(1)&#xff0c;例如&#xff0c;删除List、…

nodejs微信小程序+python+PHP-婚纱摄影预约系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Linuxfork,写时拷贝

1.prinf隐藏的缓冲区 1.思考:为什么会有缓冲区的存在? 2.演示及思考? 1).演示缓存区没有存在感 那为什么我们感觉不到缓冲区的存在呢?我们要打印东西直接就打印了呢? 我们用代码演示一下: 比如打开一个main.c,输入内容如下: #include <stdio.h> int main() { …

LLaMA 2:开源的预训练和微调语言模型推理引擎 | 开源日报 No.86

facebookresearch/llama Stars: 36.0k License: NOASSERTION LLaMA 2 是一个开源项目&#xff0c;用于加载 LLaMA 模型并进行推理。 该项目的主要功能是提供预训练和微调后的 LLaMA 语言模型的权重和起始代码。这些模型参数范围从 7B 到 70B 不等。 以下是该项目的关键特性…

kubernetes架构及核心组件简单介绍

目录 整体架构控制面kube-apiserver访问控制通知 kube-scheduler概述默认调度策略 kube-controller-manageretcd架构Raft协议日志复制 数据面kubeletkube-proxy 整体架构 集群架构图 控制面 控制面是kubernetes的核心组件&#xff0c;负责管理和控制集群的整体行为&#xf…

Python文件路径常用操作

1 文件路径 在进行数据处理时&#xff0c;经常要用代码去读文件里的数据&#xff0c;那么首先就得知道这个文件的文件路径。文件路径简单地说就是文件的存放位置。文件路径分为两块&#xff1a;文件夹路径和文件名&#xff0c;文件名又分为文件基本名和扩展名。 举例说明&…

解析MySQL Binlog:从零开始的入门指南【binlog入门指南】

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 解析MySQL Binlog&#xff1a;从零开始的入门指南 前言第一&#xff1a;MySQL中的Binlog详解1. 什么是Binlog&#xff1f;2. Binlog的作用a. 数据恢复&#xff1a;b. 主从复制…

jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对博主首页也很感兴趣o (ˉ▽ˉ&#xff1b;) 学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程 目录 1、下载jdk17 2、安装jdk17 3、配置环境变量 -> 电脑无其他jdk 4、…

【Git】修改提交信息(单次、批量)

文章目录 修改最近一次 commit 的提交信息修改某次 commit 的提交信息方法总结 修改最近一次 commit 的提交信息 git commit --amend -m "new message"修改某次 commit 的提交信息 git log --oneline 运行结果如下2f80f1b commit 4 9ee990a 第三次提交 40f2f03 comm…

Echarts title标题配置项的使用 更改颜色 副标题

title配置项主要是对图表的标题进行配置 title配置项所有属性文档 title&#xff1a; { ...... }设置标题 副标题 text: 简单创建柱形图,//图表标题 subtext: 副标题,如果想对副标题设置 超链接 边框 颜色 宽度…等 比如&#xff1a;设置超链接 sublink:‘…’, 设置标题位置…

【Unity入门】LayerMask小结

LayerMask常用的几种方法 LayerMask.GetMask 根据 层名称 获取其层遮罩值 遮罩值 2^层索引 假设 UserLayerA 和 UserLayerB 是第十层和第十一层。 这两个层会具有 User Layer 值 10 和 11。若要获取其层遮罩值&#xff0c; 可以将其名称传入 GetMask。参数可以是 其名称的列…