【2024最新华为OD-C卷试题汇总】披萨大作战 (100分) - 支持在线评测+三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

文章目录

  • 前言
    • 🎀关于华为OD
    • 🧭 机试备考指南
    • 披萨大作战
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码
    • 🍓OJ题目截图

前言

🎀关于华为OD

🧭 机试备考指南

  • 华为OD的题库大半年跟新一次,也就是说,一旦跟新,那么本年用的题目就是从该题库种选题,大概有100~200道左右

  • 最近考试换为C/D卷,C/D卷题库是一样的,D卷为双机位监控,某些外包公司应聘的为D卷。

  • 为此清隆帮大家搜集并整理了C卷的题库,后续会由清隆的ACM银牌团队将题目整理后搬上OJ,支持在线评测

  • 暂时不对外开放,需要内部体验名额的宝子可以私信清隆领取评测名额哦~

披萨大作战

题目描述

K小姐和A先生到披萨店点了一份圆形披萨,并嘱咐店员将披萨切成大小相同的偶数块。但是粗心的服务员把披萨切成了大小不一的 N N N 块,且 N N N 为奇数。

为了公平起见,两人商量了一个取披萨的规则:从K小姐开始,轮流取披萨。除了第一块披萨可以随意选取外,其余的披萨必须从上一个人取完的披萨的相邻位置开始取。

A先生每次都会选择剩下披萨中最大的一块,而K小姐知道A先生的这个特点。现在给定每块披萨的大小,请问K小姐最多能够取到多少大小的披萨呢?

输入格式

第一行包含一个正整数 N N N,表示披萨被切成了 N N N 块。

接下来 N N N 行,每行一个正整数,第 i i i 行的整数表示第 i i i 块披萨的大小 A i A_i Ai

输出格式

输出一个整数,表示K小姐最多能够取到的披萨大小之和。

样例输入

5
8
2
10
5
7

样例输出

19

数据范围

  • 3 ≤ N < 500 3 \le N < 500 3N<500,保证 N N N 为奇数
  • 1 ≤ A i ≤ 2147483647 1 \le A_i \le 2147483647 1Ai2147483647

题解

本题可以使用记忆化搜索来解决。

定义 s o l v e ( L , R ) solve(L,R) solve(L,R) 表示当前还剩下第 L L L 块到第 R R R 块披萨时,K小姐能够取到的最大披萨大小之和。那么答案就是 m a x ( s o l v e ( ( i + 1 ) m o d N , ( i − 1 + N ) m o d N ) + A i ) max(solve((i+1) \bmod N, (i-1+N) \bmod N) + A_i) max(solve((i+1)modN,(i1+N)modN)+Ai),其中 0 ≤ i < N 0 \le i < N 0i<N

对于函数 s o l v e ( L , R ) solve(L,R) solve(L,R),我们可以分情况讨论:

  1. 如果 L = R L = R L=R,那么只剩下一块披萨,K小姐直接取走,因此 s o l v e ( L , R ) = A L solve(L,R) = A_L solve(L,R)=AL

  2. 如果 L ≠ R L \neq R L=R,那么A先生会取走两端披萨中较大的一块。设 L ′ L' L R ′ R' R 分别表示取走披萨后的左右端点,那么有:

    • 如果 A L > A R A_L > A_R AL>AR,那么 L ′ = ( L + 1 ) m o d N , R ′ = R L' = (L+1) \bmod N, R' = R L=(L+1)modN,R=R
    • 如果 A L ≤ A R A_L \le A_R ALAR,那么 L ′ = L , R ′ = ( R − 1 + N ) m o d N L' = L, R' = (R-1+N) \bmod N L=L,R=(R1+N)modN

    因此 s o l v e ( L , R ) = m a x ( A L + s o l v e ( L ′ , R ) , A R + s o l v e ( L , R ′ ) ) solve(L,R) = max(A_L + solve(L', R), A_R + solve(L, R')) solve(L,R)=max(AL+solve(L,R),AR+solve(L,R))

为了避免重复计算,我们可以使用记忆化数组 d p dp dp 来保存已经计算过的状态。其中 d p [ i ] [ j ] dp[i][j] dp[i][j] 表示当前还剩下第 i i i 块到第 j j j 块披萨时,K小姐能够取到的最大披萨大小之和。

时间复杂度 O ( N 2 ) O(N^2) O(N2),空间复杂度 O ( N 2 ) O(N^2) O(N2)

参考代码

  • Python
N = int(input())
A = [int(input()) for _ in range(N)]
dp = [[-1] * N for _ in range(N)]def solve(L, R):if A[L] > A[R]:L = (L + 1) % Nelse:R = (R - 1 + N) % Nif dp[L][R] != -1:return dp[L][R]if L == R:dp[L][R] = A[L]else:dp[L][R] = max(A[L] + solve((L+1)%N, R), A[R] + solve(L, (R-1+N)%N))return dp[L][R]ans = 0
for i in range(N):ans = max(ans, solve((i+1)%N, (i-1+N)%N) + A[i])print(ans)
  • Java
import java.util.Scanner;public class Main {static int N;static int[] A;static long[][] dp;public static void main(String[] args) {Scanner sc = new Scanner(System.in);N = sc.nextInt();A = new int[N];for (int i = 0; i < N; i++) {A[i] = sc.nextInt();}dp = new long[N][N];for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {dp[i][j] = -1;}}long ans = 0;for (int i = 0; i < N; i++) {ans = Math.max(ans, solve((i+1)%N, (i-1+N)%N) + A[i]);}System.out.println(ans);}static long solve(int L, int R) {if (A[L] > A[R]) {L = (L + 1) % N;} else {R = (R - 1 + N) % N;}if (dp[L][R] != -1) {return dp[L][R];}if (L == R) {dp[L][R] = A[L];} else {dp[L][R] = Math.max(A[L] + solve((L+1)%N, R), A[R] + solve(L, (R-1+N)%N));}return dp[L][R];}
}
  • Cpp
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
#define int long long
const int N = 510;
int n, a[N], dp[N][N];int solve(int L, int R) {if (a[L] > a[R]) {L = (L + 1) % n;} else {R = (R - 1 + n) % n;}if (dp[L][R] != -1) {return dp[L][R];}if (L == R) {dp[L][R] = a[L];} else {dp[L][R] = max(a[L] + solve((L+1)%n, R), a[R] + solve(L, (R-1+n)%n));}return dp[L][R];
}signed main() {cin >> n;for (int i = 0; i < n; i++) {cin >> a[i];}memset(dp, -1, sizeof(dp));int ans = 0;for (int i = 0; i < n; i++) {ans = max(ans, solve((i+1)%n, (i-1+n)%n) + a[i]);}cout << ans << endl;return 0;
}

🍓OJ题目截图

在这里插入图片描述

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

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

相关文章

自动化测试实践:揭秘WebSocket在接口测试中的应用

如何写接口自动化&#xff1f;这个问题&#xff0c;但凡涉足过自动化测试的人员都能娓娓道来。Requests、urlib、jmeter、curl等等&#xff0c;不在话下。那么&#xff0c;如何获取接口的url、参数、响应等信息呢&#xff1f;&#xff01;答案就更是随口而出&#xff1a;看接口…

ts: 映射类型

映射类型会携带接口的可选和只读属性 interface User { name: string; age?: number; readonly email: string; } interface User { name: string; age?: number; readonly email: string; } type change<T> {[P in keyof T]: T[P] } type obj change<…

深入学习 torch.distributions

0. 引言 前几天分几篇博文精细地讲述了《von Mises-Fisher 分布》, 以及相应的 PyTorch 实现《von Mises-Fisher Distribution (代码解析)》, 其中以 Uniform 分布为例简要介绍了 torch.distributions 包的用法. 本以为已经可以了, 但这两天看到论文 The Power Spherical dist…

microk8s 报错tls: failed to verify certificate: x509:

问题&#xff1a; ssh命令出现如下图所示 输入任何microk8s的容器命令几乎都是x509报错 kubectl get pods -ALL 原因&#xff1a; 证书过期 相关文档&#xff1a; MicroK8s - 服务和端口 Microk8S v1.24 - refresh-certs 似乎无法刷新证书 问题 #3241 规范/microk8s Git…

【Linux系统】--- Linux内核日志等级详解

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Linux系统】--- Linux内核日志等级详解…

Linux开放防火墙端口

1、防火墙开放3306端口 firewall-cmd --zonepublic --add-port3306/tcp --permanent2、关闭防火墙 service iptables stop3、开启防火墙 service iptables start4、开机不自启防火墙 chkconfig --del iptables5、重启防火墙 chkconfig iptables on或者 firewall-cmd --re…

yuv420转yuv422使用neno加速的示例代码

一、使用none实现yuv420快速转换为yuv422 #include <arm_neon.h> static vs_int32_t yuv420_yuv422_conver(vs_uint8_t *p_yuv420_y, vs_uint8_t *p_yuv420_uv, vs_uint32_t yuv420_y_stride, vs_uint32_t yuv420_uv_stride, vs_int32_t width, vs_int32_t height, vs_…

HarmonyOS SDK助力中国建设银行探索金融领域创新场景

今年年初&#xff0c;中国建设银行&#xff08;以下简称建行&#xff09;手机银行首批适配HarmonyOS NEXT&#xff0c;并高效实现其应用的核心功能迁移。同时&#xff0c;建行手机银行在HarmonyOS SDK的加持下&#xff0c;充分发挥鸿蒙原生应用在原生智能方面的优势&#xff0c…

小白跟做江科大32单片机之LED流水灯

1.复制下面地址新建的工程&#xff0c;改名为3-2 LED流水灯 小白跟做江科大32单片机之LED闪烁-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139295351?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2213929…

python学习:python做一个用户管理系统操作mysql

今天继续学习python&#xff0c;操作mysql数据库 AI搜索&#xff1a;python做一个用户管理系统mysql 以下是过程和结果&#xff1a; import mysql.connector from mysql.connector import Error import time def connect_to_database():try:conn mysql.connector.connect(h…

Opencv图像处理技术(图像轮廓)

1图像轮廓概念&#xff1a; 图像轮廓是指图像中连续的像素边界&#xff0c;这些边界通常代表了图像中的物体或者物体的边缘。在数字图像处理中&#xff0c;轮廓是由相同像素值组成的曲线&#xff0c;它们连接相同的颜色或灰度值&#xff0c;并且具有连续性。轮廓可以用来描述和…

Java对文件的操作

文件测试 批量对文件直接增加指定后缀(原有后缀变文件名的一部分) import java.io.File;// 批量对文件直接增加指定后缀(原有后缀变文件名的一部分) public class AddFileExt {public static void main(String[] args) {String fileDir "D:\\xxx\\xxx\\xxx";Strin…

CAD石墨烯生成器 V1.0 渊鱼

插件介绍 CAD石墨烯生成器插件可用于在AutoCAD软件内参数化建立石墨烯几何模型。插件建立石墨烯的球棍模型&#xff0c;可控制模型的尺寸、碳原子环的尺寸、原子直径、化学键直径&#xff0c;并可控制模型的起伏形态。插件生成的实体模型可进行修改或绘图渲染&#xff0c;用于…

做视频号小店和达人对接的好,爆单少不了!

大家好&#xff0c;我是喷火龙。 目前&#xff0c;视频号是没有什么自然流量的&#xff0c;所以&#xff0c;想要出单、爆单的话&#xff0c;靠达人带货的方式才是最可靠的&#xff0c;靠达人带货是肯定要对接达人&#xff0c;并和达人沟通带货的。 下面给大家讲一讲应该怎么…

python Z-score标准化

python Z-score标准化 Zscore标准化sklearn库实现Z-score标准化手动实现Z-score标准化 Zscore标准化 Z-score标准化&#xff08;也称为标准差标准化&#xff09;是一种常见的数据标准化方法&#xff0c;它将数据集中的每个特征的值转换为一个新的尺度&#xff0c;使得转化后的…

关于EasyExcel导入数据时表格日期格式识别为数字问题

参考官方地址 自定义日期转字符串转换器 /*** 自定义excel日期转换器** author li* date 2024-05-29*/ public class CustomStringDateConverter implements Converter<String> {Overridepublic Class<?> supportJavaTypeKey() {return String.class;}Overridep…

SQL常用语句(三)-- Now()返回当前本地日期和时间的日期/时间函数,以及时间的加减

#获取当前时间&#xff1a; SELECT NOW() AS newTime; #2019-05-20 14:28:41 #当前时间减30秒&#xff1a; SELECT (NOW() - INTERVAL 30 SECOND) AS newTime; #2019-05-20 14:29:31 #当前时间加30秒&#xff1a; SELECT (NOW() INTERVAL 30 SECOND) AS newTime; …

三十五岁零基础转行成为AI大模型开发者怎么样呢?

以下从3个方面帮大家分析&#xff1a; 35岁转行会不会太晚&#xff1f;零基础学习AI大模型开发能不能学会&#xff1f;AI大模型开发行业前景如何&#xff0c;学完后能不能找到好工作&#xff1f; 一、35岁转行会不会太晚&#xff1f; 35岁正处于人生的黄金时期&#xff0c;拥…

今日选题.

诱导读者点开文章的9引真经&#xff08;二&#xff09; 标题重要么&#xff1f;新媒体、博客文通常在手机上阅读。首先所有的内容不同于纸媒&#xff0c;手机只展现标题&#xff0c;而内容都是折叠。其次读者能像看内容一样看4、5条或者7、8条标题&#xff08;区别于不同的主流…

如何在Web页面中集成AI图像识别功能

前言 在信息时代&#xff0c;Web 页面成为我们与世界交互的重要窗口。AI 技术的迅猛发展&#xff0c;特别是图像识别技术&#xff0c;为 Web 页面带来了革命性的变化。通过在 Web 页面上实现图像识别&#xff0c;我们即将迈入一个更加智能与便捷的时代。这种技术不仅使网页能够…