華為OD-2024年E卷-分批薩[100分]

文章目錄

  • 題目描述
  • 輸入描述
  • 輸出描述
  • 用例1
  • 解題思路
  • Python3源碼

題目描述

吃貨"和"饞嘴"兩人到披薩店點了一份鐵盤(圓形)披薩,并囑咐店員將披薩按放射狀切成大小相同的偶數個小塊。但是粗心的服務員將披薩切成了每塊大小都完全不同奇數塊,且肉眼能分辨出大小。
由于兩人都想吃到最多的披薩,他們商量了一個他們認為公平的分法:從"吃貨"開始,輪流取披薩。除了第一塊披薩可以任意選取外,其他都必須從缺口開始選。
他倆選披薩的思路不同。"饞嘴"每次都會選最大塊的披薩,而且"吃貨"知道"饞嘴"的想法。
已知披薩小塊的數量以及每塊的大小,求"吃貨"能分得的最大的披薩大小的總和。

輸入描述

第 1 行為一個正整數奇數 N,表示披薩小塊數量。

  • 3 ≤ N < 500

接下來的第 2 行到第 N + 1 行(共 N 行),每行為一個正整數,表示第 i 塊披薩的大小

  • 1 ≤ i ≤ N

披薩小塊從某一塊開始,按照一個方向次序順序編號為 1 ~ N

  • 每塊披薩的大小范圍為 [1, 2147483647]

輸出描述

吃貨"能分得到的最大的披薩大小的總和。

用例1

輸入:
5
8
2
10
5
7

輸出:
19

說明:
此例子中,有 5 塊披薩。每塊大小依次為 8、2、10、5、7。
按照如下順序拿披薩,可以使"吃貨"拿到最多披薩:
“吃貨” 拿大小為 10 的披薩
“饞嘴” 拿大小為 5 的披薩
“吃貨” 拿大小為 7 的披薩
“饞嘴” 拿大小為 8 的披薩
“吃貨” 拿大小為 2 的披薩
至此,披薩瓜分完畢,"吃貨"拿到的披薩總大小為 10 + 7 + 2 = 19
可能存在多種拿法,以上只是其中一種。

解題思路

給定一個環形排列的披薩數組,每塊披薩有一個美味值,需要計算出從任意位置開始,能夠獲得的最大美味值總和。

  1. 環形處理:由于披薩是環形排列的,所以在選擇披薩時需要考慮邊界情況,即當選擇了最左邊或最右邊的披薩后,如何循環到另一端。

  2. 動態規劃:使用一個二維數組 dp 作為記憶化存儲,其中 dp[L][R] 表示從左邊界 L 到右邊界 R 能夠獲得的最大美味值。如果 dp[L][R] 已經被計算過,則直接返回該值。

  3. 遞歸計算:定義一個遞歸函數來計算 dp[L][R]。如果 a[L](左邊界的披薩美味值)大于 a[R](右邊界的披薩美味值),則選擇 L 并將L向右移動一位;否則選擇 R 并將 R 向左移動一位。這樣遞歸地選擇下一步,直到只剩下一塊披薩。

  4. 遞歸基:當左右邊界相遇時(即 L == R),說明只剩下一塊披薩,直接返回這塊披薩的美味值作為遞歸基。

  5. 狀態轉移:在遞歸過程中,dp[L][R] 的值是通過比較選擇左邊界披薩和右邊界披薩后,剩下披薩的最大美味值之和來確定的。

Python3源碼

# 讀取披薩的數量
n = int(input())
# 讀取每塊披薩的美味值
arr = [int(input()) for _ in range(n)]# 初始化 dp 數組,dp為記憶化數組,用于存儲已計算過的狀態
dp = [[-1]*n for _ in range(n)]#計算最大披薩的函數
def cal_max(L,R):# 如果已計算過,直接返回結果if dp[L][R] != -1:return dp[L][R]# 根據美味值選擇吃掉左邊或右邊的披薩if arr[L] > arr[R]:L = (L+1)%nelse:R = (R+n-1)%n# 如果只剩一塊披薩,返回其美味值if L == R:dp[L][R] = arr[L]else:dp[L][R] = max(arr[L]+cal_max((L+1)%n,R),arr[R]+cal_max(L,(R+n-1)%n))return dp[L][R]# 初始化最大美味值為 0
ans = 0
# 計算并更新最大美味值
for i in range(n):ans = max(ans,cal_max((i+1)%n,(i+n-1)%n)+arr[i])# 輸出最多能吃到的披薩的美味值總和
print(ans)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72377.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機網絡入門】初學計算機網絡(六)

目錄 1.回憶數據鏈路層作用 2. 組幀 2.1 四種組幀方法 2.1.1 字符計數法 2.1.2 字節填充法 2.1.3 零比特填充法 2.1.4 違規編碼法 3. 差錯控制 3.1 檢錯編碼 3.1.1 奇偶校驗碼 3.1.2 CRC&#xff08;循環冗余校驗&#xff09;校驗碼 3.2 糾錯編碼 3.2.1 海明校驗碼…

yolo位姿估計實驗

目錄 介紹實驗過程 2.1 數據集下載 2.2 模型和數據配置文件修改 2.3 模型訓練參考鏈接 1. 介紹 1.1 簡介 YOLOv8-Pose是基于YOLOv4算法的姿勢估計模型&#xff0c;旨在實現實時高效的人體姿勢估計。姿勢估計在計算機視覺領域具有重要意義&#xff0c;可廣泛應用于視頻監控、…

極簡Redis速成學習

redis是什么&#xff1f; 是一種以鍵值對形式存儲的數據庫&#xff0c;特點是基于內存存儲&#xff0c;讀寫快&#xff0c;性能高&#xff0c;常用于緩存、消息隊列等應用情境 redis的五種數據類型是什么&#xff1f; 分別是String、Hash、List、Set和Zset&#xff08;操作命…

大語言模型學習--本地部署DeepSeek

本地部署一個DeepSeek大語言模型 研究學習一下。 本地快速部署大模型的一個工具 先根據操作系統版本下載Ollama客戶端 1.Ollama安裝 ollama是一個開源的大型語言模型&#xff08;LLM&#xff09;本地化部署與管理工具&#xff0c;旨在簡化在本地計算機上運行和管理大語言模型…

【OpenCV C++】以時間命名存圖,自動檢查存儲目錄,若不存在自動創建, 按下空格、回車、Q、S自動存圖

文章目錄 // 保存圖像的函數 void saveImage(const cv::Mat& frame) {// 生成唯一文件名auto now = std::chrono::system_clock::

【JavaEE】線程安全

【JavaEE】線程安全 一、引出線程安全二、引發線程安全的原因三、解決線程安全問題3.1 synchronized關鍵字&#xff08;解決修改操作不是原子的&#xff09;3.1.1 synchronized的特性3.1.1 synchronized的使用事例 3.2 volatile 關鍵字&#xff08;解決內存可見性&#xff09; …

Vue核心知識:動態路由實現完整方案

在Vue中實現動態路由&#xff0c;并結合后端接口和數據庫表設計&#xff0c;是一個復雜的項目&#xff0c;需要多個技術棧和步驟的配合。以下將詳細描述整個實現過程&#xff0c;包括數據庫設計、后端接口設計、前端路由配置以及如何實現動態路由的功能。 目錄 一、需求分析二…

自媒體多賬號如何切換不同定位才能做得更好

一、選擇稀缺增長的賽道&#xff0c;避開內卷紅海 1.職場賽道 ● 細分方向&#xff1a;公務員/體制內經驗分享、自由職業指南、遠程辦公技巧。例如&#xff0c;通過采訪自由職業者或分享遠程工作體驗&#xff0c;快速積累精準粉絲。 ● 優勢&#xff1a;職場人群需求明確&…

基于SpringBoot的校園二手交易平臺(源碼+論文+部署教程)

運行環境 校園二手交易平臺運行環境如下&#xff1a; ? 前端&#xff1a;Vue ? 后端&#xff1a;Java ? IDE工具&#xff1a;IntelliJ IDEA&#xff08;可自行更換&#xff09; ? 技術棧&#xff1a;SpringBoot Vue MySQL 主要功能 校園二手交易平臺主要包含前臺和…

iPhone 鏡像 連接錯誤

重置連接 defaults delete com.apple.ScreenContinuity打開 iPhone 鏡像 參考 mac鏡像iPhone無法連接報錯個人經歷的 iPhone 鏡像 bug 與部分解決辦法

Qt基礎入門-詳解

前言 qt之路正式開啟 &#x1f493; 個人主頁&#xff1a;普通young man-CSDN博客 ? 文章專欄&#xff1a;C_普通young man的博客-CSDN博客 ? 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有問題 評論區見&#x1f4dd; &#x1f389;歡迎大家點贊&#x1f44…

Unity 優化封裝常用API和編輯器擴展工具包

資源名&#xff1a;WXTools 文章目錄 MeshRenderEditorSpriteGroupToolWXEditorUtilsComponentUtilsDataUtilsGameObjectUtilsRigidbodyUtilsStringUtilsTransformUtilsVectorUtilsWXTools 內容包括&#xff1a; MeshRenderEditor mesh擴展 SpriteGroupTool SpriteGroup操作…

python學習第三天

條件判斷 條件判斷使用if、elif和else關鍵字。它們用于根據條件執行不同的代碼塊。 # 條件判斷 age 18 if age < 18:print("你還是個孩子&#xff01;") elif age 18:print("永遠十八歲&#xff01;") else:print("你還年輕&#xff01;")…

ThinkPHP使用phpword讀取模板word文件并添加表格

1.安裝phpword包composer require phpoffice/phpword 2.模板文件結構 如上圖框住的是要替換的文本和要復制表格樣式 實現代碼 <?phpnamespace app\api\logic;use PhpOffice\PhpWord\Element\Table; use PhpOffice\PhpWord\SimpleType\TblWidth; use PhpOffice\PhpWord\…

(原創)用python語言基于paddleocr構建批量識別實現紙質和電子的增值稅專用發票程序

文章目錄 1. 說明2. 準備工作3. 代碼3.1 導入庫&#xff1a;3.2 遍歷發票指定處理方式3.3 發票識別相關函數3.4 發票字段定位函數3.6 識別記錄相關函數3.6 識別結果校驗3.7 文件預處理等其他函數3.8 main主函數 1. 說明 1.1 以paddle識別引擎為基礎的增值稅發票識別程序&#…

DeepSeek搭配Excel,制作自定義按鈕,實現辦公自動化!

今天跟大家分享下我們如何將DeepSeek生成的VBA代碼&#xff0c;做成按鈕&#xff0c;將其永久保存在我們的Excel表格中&#xff0c;下次遇到類似的問題&#xff0c;直接在Excel中點擊按鈕&#xff0c;就能10秒搞定&#xff0c;操作也非常的簡單. 一、代碼準備 代碼可以直接詢問…

解決顯示器在高刷條件下花屏的問題

起因是家里的顯示器好久沒用之后&#xff0c;100HZ的刷新率下會花屏&#xff0c;在75HZ的情況下就正常顯示&#xff0c;在網上找了一圈感覺是硬件問題解決不了 于是想了想如果我用90HZ呢&#xff1f;不過原始的情況下沒有自定義刷新率的選擇&#xff0c;不過amd和nvida控制面板…

IP-----雙重發布

目錄 6.雙重發布 1.重發布的作用 2.部署條件 1.必須存在ASBR 2.種子度量值 3.重發布的規則 4.重發布的數量 5.重發布的場景 1.場景和規則 2.直連和靜態 3.動態RIP 4.動態OSPF 5.更改開銷值 6.重發布的問題1 7.重發布的問題2 1.流量 2.前綴列表 3.偏移列表 4…

藍橋杯試題:DFS回溯

一、題目要求 輸入一個數組n&#xff0c;輸出1到n的全排列 二、代碼展示 import java.util.*;public class ikun {static List<List<Integer>> list new ArrayList<>();public static void main(String[] args) { Scanner sc new Scanner(System.in);…

Ruby基礎

一、字符串 定義 283.to_s //轉為string "something#{a}" //定義字符串&#xff0c;并且插入a變量的值 something//單引號定義變量 %q(aaaaaaaaa) // 定義字符串&#xff0c;&#xff08;&#xff09;內可以是任何數&#xff0c;自動轉義雙引號%Q("aaaaa"…