OD C卷 - 分披萨

分披萨

  • 有大小不同的奇数块披萨;
  • 从A开始轮流取披萨,第一块可以任意选取,其他都必须从缺口开始选;
  • B每次都选最大块的, A知道B的想法;
  • 求A能获得的披萨块总和的最大值;
    输入描述:
    第一行输入n(奇数,表示披萨块数), [3, 500)
    接下来的n行,每行输入一个披萨块的大小
    输出描述:
    A能获得的披萨块总和的最大值;

示例1
输入:
5
8
2
10
5
7
输出:
19
说明:
A拿10
B拿5
A拿7
B拿8
A拿2
此时A拿到最多19

示例2:
输入:
7
4
3
8
2
10
9
20
输出:
35

示例3
输入:
23
45
78
21
12
14
52
76
123
302
34
43
73
37
89
98
101
102
201
120
24
15
17
28
输出:
1032

思路:

  • 回溯法

  • A先随意取一块,有n种取法,0 1 2… n-1

  • A取的当前索引i

    • left = (i + 1 + n) % n;
    • right = (i -1 + n) % n;
    • backtrace(left, right),先B取一个较大的,然后A取并赋值matrix[left][right],其中matrix是一个n*n的矩阵,初始化为0;
    • matrix[left][right] = max(A先取左边的值 + 回溯结果,A先取右边的值+回溯结果),并返回
    • left == right 时,matrix[left][right] 赋值并返回
    • 针对示例1 更新后的matrix为:
      在这里插入图片描述
  • A取的当前索引i对应的值 + 回溯值,若大于result,则更新result;

 

# 输入总块数
n = int(input().strip())

# 每块的大小 - 列表
nums = []
for i in range(n):
    nums.append(int(input().strip()))

# A取的时候,矩阵对应[left, right]位置保存A可以获取的最大和
matrix = [[0 for i in range(n)] for j in range(n)]


# 回溯函数
def backtrace(left, right):
    # 全局变量
    global n, nums, matrix

    # B取
    if nums[left] > nums[right]:
        left = (left + n + 1) % n
    elif nums[left] < nums[right]: # 块的大小各不相同
        right = (right + n - 1) % n # 右边的指针向左走一步

    # A 取并 给matrix赋值(matrix对应位置未赋值时)
    if matrix[left][right] <= 0: # 为初始值
        if left == right: # 结束
            matrix[left][right] = nums[left]
        else:
            new_left = (left + 1) % n # 左边指针向右走一步
            new_right = (right + n - 1) % n

            # B取过后,A也取较大的
            # A从左边追溯
            matrix[left][right] = nums[left] + backtrace(new_left, right)
            # A从右边追溯,取较大者
            if nums[right] + backtrace(left, new_right) > matrix[left][right]:
                matrix[left][right] = nums[right] + backtrace(left, new_right)

        return matrix[left][right]
    else:
        return matrix[left][right]


result = 0 # 记录最大结果
i = 0 # n种情况 0 1 2 ... n-1
while True:
    if i >= n:
        break
    else:
        left = (i + n + 1) % n
        right = (i + n - 1) % n
        other_sum = backtrace(left, right)
        if other_sum + nums[i] > result:
            result = other_sum + nums[i]
    i += 1
print(result)


 

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

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

相关文章

企业微信变更主体公证怎么弄?

企业微信变更主体有什么作用&#xff1f;现在很多公司都用企业微信来加客户&#xff0c;有时候辛辛苦苦积累了很多客户&#xff0c;但是公司却因为各种各样的原因需要注销&#xff0c;那么就需要通过企业微信变更主体的方法&#xff0c;把企业微信绑定的公司更改为最新的。企业…

Prometheus+Grafana 监控Tongweb嵌入式(by lqw)

文章目录 1.思路2.部署准备3.Grafana仪表盘json文件下载4.tw嵌入式jar包本地引入依赖并测试运行5.运行jmx_prometheus_javaagent-0.19.0.jar形式获取监控数据&#xff08;方法一&#xff09;6.使用Actuator 获取监听数据&#xff08;方法二&#xff09;7.Prometheus部署8.Prome…

【Nebula笔记】简介及安装

目录 一、简介 (一) 什么是图数据库 二、安装 (一) 原生安装 (二) Docker & Docker compose 1. Docker安装 Linux Window 2. 部署NebulaGraph (三) to MAC 三、Nebula Graph Studio (一) 版本兼容性 (二) 原生安装 (三) Docker compose (四) 连接Nebula Gra…

Docker(二):Docker常用命令

docker 查看docker支持的所有命令和参数。 ➜ ~ docker Management Commands:config Manage Docker configscontainer Manage containersimage Manage imagesnetwork Manage networksnode Manage Swarm nodesplugin Manage pluginssecret …

STM32之HAL开发——HAL库框架介绍

HAL库外设设计思想 HAL库借鉴面向对象的设计思想&#xff0c;将外设驱动封装为对象。 HAL库使用主线 HAL使用的主要用在俩个地方&#xff0c;无外乎外设初始化以及外设的使用。想用好这两个功能&#xff0c;我们首先得对外设的封装有一定的了解。 句柄结构体 xx_HandleTypeDef…

JAVA学习笔记19(面向对象编程)

1.面向对象编程 1.1 类与对象 1.类与对象的概念 ​ *对象[属性]/[行为] ​ *语法 class cat {String name;int age; }main() {//cat1就是一个对象//创建一只猫Cat cat1 new Cat();//给猫的属性赋值cat1.name "123";cat1.age 10; }​ *类是抽象的&#xff0c;…

蓝桥杯真题:幸运数字

这道题可以用 integer.string&#xff08;&#xff09;求每个进制的数&#xff0c;但这里要每一位数相加&#xff0c;所以用这个方法会比较麻烦&#xff0c;如下 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scan new Sc…

电脑不能读取移动硬盘,但是可以读取U盘解决方法

找到此电脑 右键设备管理器&#xff0c;找到其中的通用串行总线控制器。 注意&#xff0c;凡是插入到电脑当中不能读取的U盘或者移动硬盘&#xff0c;都会在通用串行总线控制器当中显示为USB大容量存储设备 鼠标选中“USB大容量存储设备”&#xff0c;右键卸载它。此时&#x…

软件应用,宠物医院兽医开的处方单管理系统软件教程,宠物店营业软件教程

软件应用&#xff0c;宠物医院兽医开的处方单管理系统软件教程&#xff0c;宠物店营业软件教程 一、前言 以下软件操作教程以 佳易王宠物医院兽医处方软件V17.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 在开处方单的时候&#xff0c;可以打…

【Flink】WaterMark 实战

WaterMark 实战 1.WaterMark 触发详解2.实际案例 1.WaterMark 触发详解 例如&#xff0c;现在我们有了一个 [12:00:00-12:00:10) 的时间窗口&#xff0c;现在事件如下图所示顺序 A、B、C、D、E、F … 到达。 在未设置 WaterMark 的情况下&#xff0c;当元素 C 到达的时候&…

[AIGC] Redis基础命令集详细介绍

Redis是一个强大的开源的键-值存储系统&#xff0c;被广泛应用于各种应用程序中。在使用Redis时&#xff0c;我们需要掌握一些基本的Redis命令来操作存储在其上的数据。这篇文章将向你介绍一些基本的Redis命令&#xff0c;让你能够更好地使用和理解Redis。 文章目录 启动Redis…

Camera入门基础知识

一、camera介绍 1.1 camera硬件组成 camera一般由Lens、VCM音圈马达、底座支架、Sensor、Driver IC、output interface组成。如下图: 这里面要注意的是有些摄像头模组有VCM,有些则没有,有些output interface输出的是CSI信号,有的输出的是串行信号,需要接解串器。…

可变参数 --java学习笔记

可变参数 就是一种特殊形参&#xff0c;定义在方法、构造器的形参列表里&#xff0c;格式是:数据类型..参数名称 可变参数的特点和好处 特点:可以不传数据给它;可以传一个或者同时传多个数据给它;也可以传一个数组给它好处:常常用来灵活的接收数据 可变参数的注意事项: 可…

js教程(8)

一、事件流 1.概述 在JavaScript中&#xff0c;事件流描述的是事件在DOM结构中传播和被处理的顺序。事件流分为冒泡阶段和捕获阶段。 冒泡阶段&#xff08;Bubbling Phase&#xff09;&#xff1a;事件首先从最内层的元素开始向父级元素传播&#xff0c;一直传播到最外层的元素…

树型结构、二叉树、二叉树的创建销毁、二叉树的四种遍历、二叉树层序遍历与队列结合

我要成为嵌入式高手之3月23日数据结构第六天&#xff01;&#xff01; ———————————————————————————— 树形结构 特性&#xff1a; 一对多 概念&#xff1a; 由n个结点组成的有限集 有一个根结点&#xff1b;其他结点只有一个前驱结点&#xff…

图论基础|841.钥匙和房间、463. 岛屿的周长

目录 841.钥匙和房间 思路&#xff1a;本题是一个有向图搜索全路径的问题。 只能用深搜&#xff08;DFS&#xff09;或者广搜&#xff08;BFS&#xff09;来搜。 463. 岛屿的周长 841.钥匙和房间 力扣题目链接 (opens new window) 有 N 个房间&#xff0c;开始时你位于 0…

Windows Server 2016 配置NTP客户端

目录 1. 前提条件1.1 进入服务管理界面1.2 开启Windows Time服务 2. 情况1&#xff1a;可以直接设置NTP时钟2.1 Internet时间设置 3. 情况2&#xff1a;有的版本服务器上没有“Internet时间”3.1 运行gpedit.msc 打开本地策略组3.2 Windows 时间服务3.3 配置Windows NTP客户端3…

2023年天府杯全国大学生数学建模竞赛A题震源属性识别模型构建与震级预测解题全过程文档及程序

2023年天府杯全国大学生数学建模竞赛 A题 震源属性识别模型构建与震级预测 原题再现&#xff1a; 地震是一种较为复杂的地壳运动现象&#xff0c;全世界每年发生的地震灾害事故不计其数。旨在减少地震灾害的地震预警预报技术需要在日常地震监测中有效识别出天然地震事件&…

go面向对象

继承 封装 多态 定义结构体 //定义老师的结构体 type Teacher struct {Name stringAge intSchool string }func main() {var t1 Teacherfmt.Println(t1)t1.Name "tom"t1.Age 20t1.School "school"fmt.Println(t1) } 结构体实例的创建 package ma…

springboot项目中,子模块中无法引入父模块中类

问题&#xff1a; 当前模块kangning_admin中想引入 com.google.code.kaptcha.Producer类&#xff0c;但是当前模块中没有该类 解决办法 1、在pom.xml文件上右键---Maven---Reload project 重新加载pom文件中的依赖 2、 在Idea的右边Maven窗口&#xff0c;在根目录上执行cle…