【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) % 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]

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题目截图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

若依+vue框架使用字典下拉框回显错误

【版权所有&#xff0c;文章允许转载&#xff0c;但须以链接方式注明源地址&#xff0c;否则追究法律责任】【创作不易&#xff0c;点个赞就是对我最大的支持】 前言 仅作为学习笔记&#xff0c;供大家参考 总结的不错的话&#xff0c;记得点赞收藏关注哦&#xff01; 目录 …

面试:eureka、nacos、consul的区别

配置中心 配置中心eureka不支持nacos支持 用起来简单&#xff0c;符合springBoot的命名风格&#xff0c;支持动态刷新consul支持 但用起来偏麻烦&#xff0c;不太符合springBoot框架的命名风格&#xff0c;支持动态刷新 注册中心

电流继电器DL-13 柜内安装带板前接线附件 JOSEF约瑟

DL-10系列电流继电器板前接线为电磁式瞬动过电流继电器&#xff0c;它广泛用于电力系统二次回路继电保护装置线路中&#xff0c;作为过电流启动元件。 系列型号 DL-11电流继电器; DL-12电流继电器; DL-13电流继电器&#xff1b; 一、应用范围 DL-13/2电流继电器 板前接线为…

一文看懂!电磁仿真软件CST Studio Suite的技术发展历程

CST工作套件室是一款功能强大、专业级别的软件包&#xff0c;用于进行微波无源器件和天线的仿真分析和设计。它支持的应用领域包括耦合器、滤波器、环流器、隔离器、谐振腔、平面结构、连接器、电磁兼容、集成电路封装以及各种类型的天线和天线阵列。该软件可以提供必要的S参数…

polarctf靶场[reverse]shell、PE结构、拼接

[reverse]shell 考点&#xff1a;脱壳 将所解压的文件拖入DIE有无有壳&#xff0c;文件类型 发现有UPX壳&#xff0c;是32位的文件&#xff0c;先脱壳 用FFI工具脱壳 将脱壳后的程序用32位IDA进行反汇编 点开_main_0函数进行查看 看到flag&#xff0c;&#xff08;F5&#…

开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述

1. 文档管理系统是什么 文档管理系统&#xff08;DMS&#xff1a;Document Management System&#xff09;是一种软件系统&#xff0c;用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档&#xff0c;如文本文档、电子表格、图像、音频或视频文件等…

Vue3实战笔记(50)—Vue 3+ECharts还能看股票?附源码

文章目录 前言一、改进之前的封装echarts组件二、封装股票k线图总结 前言 今天封装股票k线图组件 前几天学的几个知识点都有用到&#xff0c;都是在封装k线图的时候遇到的问题&#xff0c;又啃了一遍基础。 一、改进之前的封装echarts组件 使用ref对象方式封装useEChartsRef.t…

端到端目标检测 |从DETR 到 GroundingDINO

文章目录 一&#xff0c;DETR1. 简介2. 亮点3. 细节4. 总结一下 二&#xff0c;GroundingDINOGrounding DINO的整体流程Grounding DINO的目标函数 一&#xff0c;DETR 之前的目标检测框架&#xff0c;需要很多的人工干预&#xff0c;很多的先验知识&#xff0c;而且可能还需要…

从简单到复杂,红酒配餐的层次感与变化

红酒配餐是一种艺术&#xff0c;通过不同层次的搭配&#xff0c;可以呈现出丰富的味觉变化&#xff0c;使每一口都充满惊喜。云仓酒庄雷盛红酒以其卓着的品质和与众不同的口感&#xff0c;为红酒配餐提供了无限可能。从简单到复杂&#xff0c;红酒配餐的层次感与变化如下&#…

这几个素材网站,是B站up主的剪辑素材宝藏库!

1.Videvo 这是一个提供完全免费的视频的网站&#xff0c;主要收集互联网免费的视频片段 网站目前收录了超过2700部高清短片&#xff0c;并且每周都会更新 2.电影预告片资源网——预告片世界 预告片世界是一个个人网站&#xff0c;为粉丝提供最新的高清电影预告片资源的在线观…

ThingsBoard物联网网关在智慧城市数据采集中的应用

智慧城市由监控中心、采集网关、前端采集设备、前端感应执行器组成。 为何选用ThingsBoard作为平台 监控中心为物联网平台&#xff0c;该平台包含云计算、大数据、人工智能、物联网、GIS、云安全等主要模块&#xff0c;具备数据采集、数据交换、超大规模计算、数据分析、数据应…

地理信息系统(GIS)软件的最新进展

在数字化转型的浪潮中&#xff0c;地理信息系统&#xff08;GIS&#xff09;作为连接现实与数字世界的桥梁&#xff0c;其软件和技术的每一次迭代升级都在推动着空间信息处理和分析能力的飞跃。作为地理信息与遥感领域的探索者&#xff0c;本文将带您深入了解GIS软件的最新进展…

任务3.1:采用面向对象方式求三角形面积

面向对象编程&#xff08;OOP&#xff09;是一种将现实世界中的实体抽象为对象&#xff0c;并通过类和对象来模拟现实世界中的行为和属性的编程范式。在本实战任务中&#xff0c;我们通过创建一个Triangle类来模拟现实世界中的三角形&#xff0c;并使用面向对象的方法来求解三角…

好用的国产大文件传输软件有哪些,快来看看吧

在这个数字化飞速发展的时代&#xff0c;我们每天都在与各种文件打交道&#xff0c;从简单的文档到庞大的视频素材&#xff0c;文件的体积越来越大&#xff0c;传统的文件传输方式逐渐显得力不从心。面对这个挑战&#xff0c;大文件传输软件应运而生&#xff0c;它们不仅解决了…

小红书图文笔记怎么做?纯干货!

小红书图文笔记的制作是一门艺术&#xff0c;它需要结合精美的图片和有价值的内容&#xff0c;以吸引和留住用户的注意力。伯乐网络传媒给大家分享制作小红书图文笔记的干货指南&#xff0c;包括准备、制作、发布和优化的各个环节。 一、准备阶段 确定目标受众&#xff1a;找到…

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题&#xff0c;这边想要查询为什么出现无法访问的原因&#xff0c;但不知道如何在主机上面进行检查&#xff0c;由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板&#xff0c;因此联系Hostease的咨询了Hostease技术支持&a…

Vue+AntDesignVue实现a-tree树形组件的层级选中功能

文章目录 一、构建树形组件二、js代码实现 最近碰到了一个新需求&#xff0c;使用树形选择器实现角色管理功能&#xff0c;当用户选中一个节点时&#xff0c;其所有子节点都会被自动选中&#xff1b;同样&#xff0c;当用户取消选中一个节点时&#xff0c;其所有子节点也会被取…

Pandas格式化DataFrame的浮点数列

在呈现数据的同时&#xff0c;以所需的格式显示数据也是一个重要而关键的部分。有时&#xff0c;值太大了&#xff0c;我们只想显示其中所需的部分&#xff0c;或者我们可以说以某种所需的格式。 让我们看看在Pandas中格式化DataFrame的数值列的不同方法。 例1&#xff1a;将…

九章云极DataCanvas公司DingoDB完成中国信通院权威多模数据库测试

2024年5月16日&#xff0c;九章云极DataCanvas公司自主研发和设计的开源多模向量数据库DingoDB顺利完成中国信息通信研究院&#xff08;以下简称中国信通院&#xff09;多模数据库产品测试。本次测试的成功标志着DingoDB在技术能力、性能表现和产品稳定性方面得到了权威机构的高…

AI绘画(Stable Diffusion)喂饭级教程-第2篇(SD大模型详解)

SD大模型的概念及基础知识 先做一个比喻 如果SD是一个画师&#xff0c;那么大模型就是画师的大脑&#xff01; 就是可惜&#xff0c;这个大脑有点轴&#xff0c;它只能想象出自己喜欢的画面。 比如你用了一个二次元的大脑&#xff0c;它想出来的画面就是这样的&#xff1a; …