美的的笔试
第一题
有两只猫咪和n条不同类型的鱼,每条鱼都只能被其中一只猫咪吃掉。
下标为i处的鱼被吃掉的得分为:
如果第一只猫咪吃掉,则得分为reward1[i]。如果第二只猫咪吃掉,则得分为reward[i]。
给你一个正整数数组reward1 ,一个正整数数组reward2,和一个非负整数k。
请你返回第一只猫咪恰好吃掉k条鱼的情况下,最大得分为多少。
输入
1 1 3 4
4 4 1 1
2
输出
15
说明
这个例子中,第一只猫咪吃掉第2和3条鱼(下标从0于始),第二只猫咪吃掉第0和1条鱼。
总得分为4+4+3+4=15。
15是最高得分。
思路
- 定义状态:令 dp[i][j] 表示第一只猫咪吃掉 i 条鱼,第二只猫咪吃掉 j 条鱼时,能得到的最大得分。
- 初始状态:dp[0][0] = 0,表示两只猫咪都没有吃鱼时,得分为 0。
- 状态转移:对于每一条鱼,有三种选择:
- 第一只猫咪吃掉,那么 dp[i][j] = dp[i-1][j] + reward1[i+j-1],其中 reward1[i+j-1] 表示第 i+j-1 条鱼的得分。
- 第二只猫咪吃掉,那么 dp[i][j] = dp[i][j-1] + reward2[i+j-1],其中 reward2[i+j-1] 表示第 i+j-1 条鱼的得分。
- 两只猫咪都不吃,那么 dp[i][j] = dp[i][j],不改变得分。
- 取这三种选择中的最大值作为 dp[i][j] 的值。
- 最终答案:由于题目要求第一只猫咪恰好吃掉 k 条鱼,那么最终答案就是 dp[k][n-k],其中 n 是鱼的总数。
#include <iostream>
#include <vector>
using namespace std;int maxScore(vector<int>& reward1, vector<int>& reward2, int k) {int n = reward1.size(); // 鱼的总数vector<vector<int>> dp(k + 1, vector<int>(n - k + 1, 0)); // 定义状态数组for (int i = 0; i <= k; i++) { // 遍历第一只猫咪吃掉的鱼数for (int j = 0; j <= n - k; j++) { // 遍历第二只猫咪吃掉的鱼数if (i == 0 && j == 0) continue; // 跳过初始状态int score = 0; // 记录当前得分if (i > 0) { // 如果第一只猫咪可以吃掉一条鱼score = max(score, dp[i-1][j] + reward1[i+j-1]); // 更新得分}if (j > 0) { // 如果第二只猫咪可以吃掉一条鱼score = max(score, dp[i][j-1] + reward2[i+j-1]); // 更新得分}dp[i][j] = score; // 更新状态数组}}return dp[k][n-k]; // 返回最终答案
}int main() {vector<int> reward1 = {1, 1, 3, 4}; // 输入第一只猫咪的得分数组vector<int> reward2 = {4, 4, 1, 1}; // 输入第二只猫咪的得分数组int k = 2; // 输入第一只猫咪要吃掉的鱼数cout << maxScore(reward1, reward2, k) << endl; // 输出最大得分return 0;
}
第二题
在一个城市探险活动中,主办方标记了n个地标,编号为0到n-1。大壮需要从城市的起点(编号为0的地标)经过一系列地标后,最终到达终点(编号为n-1的地标)。每个地标都对应一个整数,表示从当前地标可以跳过的地标数量。例如,如果小王当前处于编号为i的地标,且地标对于的数字为nums[i],那么他可以选择跳过中间所有地标,而是直接去往任意编号为i用j的地标,其中0<=j= nums[i]且i+j<n。主办方确保有路线可以成功到达终点地标,为了顺利到达终点,请帮助大壮计算,他需要经过的最少的地标数量。
输入描述:
地标组数
输出描述:
经过最少地标数量
示例1
输入
[2, 1, 1,3, 1, 3, 1, 4]
输出
4
示例2
输入
[5, 4, 3, 2, 1,2, 3, 1, 1, 2]
输出
3
思路:
- 定义一个变量 ans 表示经过的地标数量,初始为 0。
- 定义一个变量 cur 表示当前所在的地标编号,初始为 0。
- 定义一个变量 next 表示下一步要跳到的地标编号,初始为 0。
- 使用一个 while 循环,当 cur < n - 1 时,执行以下操作:
- 遍历从 cur + 1 到 cur + nums[cur] 的所有地标编号 i,找出使得 i + nums[i] 最大的那个 i,并赋值给 next。
- 如果 next == cur,说明无法继续前进,返回 -1 表示无解。
- 否则,将 cur 更新为 next,并将 ans 加一。
- 返回 ans 作为最终答案。
根据以上思路,可以用 C++ 语言编写如下代码:
#include <iostream>
#include <vector>
using namespace std;int minLandmarks(vector<int>& nums) {int n = nums.size(); // 地标的总数int ans = 0; // 经过的地标数量int cur = 0; // 当前所在的地标编号int next = 0; // 下一步要跳到的地标编号while (cur < n - 1) { // 当没有到达终点时int max_jump = 0; // 记录能跳到的最远距离for (int i = cur + 1; i <= cur + nums[cur]; i++) { // 遍历所有可选的地标if (i + nums[i] > max_jump) { // 如果能跳得更远max_jump = i + nums[i]; // 更新最远距离next = i; // 更新下一步目标}}if (next == cur) return -1; // 如果无法前进,返回-1表示无解cur = next; // 更新当前位置ans++; // 更新经过的地标数量}return ans; // 返回最终答案
}int main() {vector<int> nums = {2, 1, 1, 3, 1, 3, 1, 4}; // 输入地标组数cout << minLandmarks(nums) << endl; // 输出经过最少地标数量return 0;
}
相关文章:
美的的笔试
第一题 有两只猫咪和n条不同类型的鱼,每条鱼都只能被其中一只猫咪吃掉。 下标为i处的鱼被吃掉的得分为: 如果第一只猫咪吃掉,则得分为reward1[i]。如果第二只猫咪吃掉,则得分为reward[i]。 给你一个正整数数组reward1 ,一个正整数数组reward2࿰…...
Android 1.2 开发环境搭建
目录 1.2 开发环境搭建 1.JDK安装与配置 2.开发工具二选一 3.相关术语的解析 4.ADB命令行的一些指令 5.APP程序打包与安装的流程: 6.APP的安装过程: 7.本节小结 1.2 开发环境搭建 现在主流的Android开发环境有: ①Eclipse ADT SDK ②Android Stu…...
vue 页面加水印
首先创建一个waterMark.js文件,当然文件命名可自定义, use strictconst watermark {}/**** param {要设置的水印的内容} str* param {需要设置水印的容器} container*/ const setWatermark (str, container) > {const id 1.23452384164.123412415…...
Android ImageView详解
scaleType属性详解 在 Android 中,ImageView 控件的 scaleType 属性用于指定图像在 ImageView 内部的缩放和对齐方式。scaleType 属性可以帮助你控制图像的显示方式,以适应 ImageView 的尺寸或实现其他特定的显示效果。以下是常见的 scaleType 属性值和…...
ElasticSearch第二讲:ES详解 - ElasticSearch基础概念
ElasticSearch第二讲:ES详解 - ElasticSearch基础概念 在学习ElasticSearch之前,先简单了解下ES流行度,使用背景,以及相关概念等。本文是ElasticSearch第二讲,ElasticSearch的基础概念。 文章目录 ElasticSearch第二讲…...
Ajax模拟视频点赞功能
前台 <%--Created by IntelliJ IDEA.User: xxDate: 2023/9/4Time: 10:00To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head>&l…...
java解决 衣服尺码 Compare T-Shirt Sizes
java解决衣服尺码 时间限制:3000MS 内存限制:589824KB 题目描述: 一般来说衣服尺码分为L,M,S三种,分别代表大(Large),中(Medium)和小(Small)。不过由于人的身高差异性较大,尺码又会…...
基于python+Django深度学习的音乐推荐方法研究系统设计与实现
摘 要 数字化时代带动着整个社会的信息化发展,随着数字媒体的不断发展,现在通多媒体数字产品的内容越来越丰富,传播影响力越来越强,以音乐为例,现在的音乐文化多样、音乐资源也异常的丰富,在这种大数据的环…...
【枚举区间+线段树】CF Ehu 152 E
Problem - E - Codeforces 题意: 思路: 感觉是个套路题 对区间计数,按照CF惯用套路,枚举其中一个端点,对另一个端点计数 对于这道题,枚举右端点,对左端点计数 Code: #include &…...
宏定义天坑记录
宏定义天坑记录 事件原委与推理过程 在编译一个使用了Protobuf的项目时出现了如下报错 [ybVM-8-7-centos boost_searcher]$ make g -o http_server http_server.cc data/raw_html.pb.cc -stdc11 -lboost_system -lboost_filesystem -lpthread -ljsoncpp -lprotobuf In file…...
Git的一些常用概念与操作方法分享
Git是一个版本控制系统,它可以记录代码的变化历史并允许多个开发者同时对同一代码库进行开发。以下是Git的基本概念和使用方式: 仓库(Repository)- 保存代码的地方。Git仓库包含了所有的版本历史记录、代码以及其他相关文件。 分…...
webpack实战:某网站JS逆向分析
文章目录 1. 写在前面2. 抓包分析3. 扣加密代码 1. 写在前面 好的逆向能够帮助我们了解加密实现,然后根据加密方式(md5,base64,res,des,rsa…)还原加密算法的过程。可以看看我之前的这篇文章:快速定位查找加密方式特征与技巧 目标站点&#…...
826. 安排工作以达到最大收益;2257. 统计网格图中没有被保卫的格子数;816. 模糊坐标
826. 安排工作以达到最大收益 核心思想:排序维护最大利润。首先我们需要对工人按照能力排序,前面工人满足的最大利润后面的工人肯定是满足的,所以我们只需要用一个tmp来维护小于等于当前工人的最大利润,然后如何得到tmpÿ…...
JAVA毕业设计097—基于Java+Springboot+Vue+uniapp的医院挂号小程序系统(源码+数据库)
基于JavaSpringbootVueuniapp的医院挂号小程序系统(源码数据库)097 一、系统介绍 本系统前后端分离(网页端和小程序端都有) 本系统分为管理员、医院、用户三种角色(角色菜单可自行分配) 用户功能: 注册、登录、医院搜索、最新资讯、医生搜索、挂号预约、挂号记…...
4.3.3.1 【MySQL】CHAR(M)列的存储格式
我们知道 Compact 行格式在 CHAR(M) 类型的列中存储数据的时候还挺麻烦,分变长字符集和定长字符集的情况,而在 Redundant 行格式中十分干脆,不管该列使用的字符集是啥,只要是使用 CHAR(M) 类型,占用的真实数据空间就是…...
js 处理数组合并vs对象合并
前言: 前端开发中,我们会遇到各种数据的需求,但是后端给你返回的数据结构又不是你想要的, 只能自己动手,去组装数据,重新定义数据结构了。 1. js 数组合并的方法 常用的应该是 concat 方法. 示例: let arr1 […...
Webpack vs Vite的核心差异
构建速度: Webpack: Webpack的构建速度相对较慢,尤其在大型项目中,因为它需要分析整个依赖图,进行多次文件扫描和转译。Vite: Vite以开发模式下的极速构建著称。它利用ES模块的特性,只构建正在编辑的文件,而不是整个项…...
53、springboot对websocket的支持有两种方式-------1、基于注解开发 WebSocket ,简洁实现多人聊天界面
基于注解开发 WebSocket –注解就是: OnOpen、 OnClose 、 OnMessage 、OnError这些 ★ WebSocket的两种开发方式 ▲ Spring Boot为WebSocket提供了两种开发方式: 基于spring-boot-starter-websocket.jar开发WebSocket 基于Spring WebFlux开发WebSoc…...
18 Linux之Python定制篇-Python开发平台Ubuntu
18 Linux之Python定制篇-Python开发平台Ubuntu 文章目录 18 Linux之Python定制篇-Python开发平台Ubuntu18.1 安装Ubuntu虚拟机18.4 Ubuntu的root用户18.5 Ubuntu下开发Python 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。可能会用到的资料有如下所示&…...
AMEYA360:士兰微推出600A/1200V IGBT汽车驱动模块,提升充电速度与行驶动力
随着人们对环保意识的提高和汽车驾驶体验感的不断追求,新能源汽车的市场需求逐渐增大,已然成为汽车发展的大趋势,但是新能源汽车充电时间长、续航里程短等问题仍然是汽车厂商和车主们的痛点。因此,需要更好的汽车驱动产品来实现“…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
