每日c/c++題 備戰藍橋杯(P1252洛谷 馬拉松接力賽)

洛谷P1060 馬拉松接力賽題解:貪心算法在資源分配中的巧妙應用

題目描述

P1060 馬拉松接力賽是一道結合貪心策略與動態規劃思想的資源分配問題。題目要求將25公里的馬拉松接力賽合理分配給5名選手,使得總耗時最短。每位選手可跑1-10公里的整數距離,且必須滿足"連續跑更遠距離不會更快"的物理約束。

解題思路

本題核心在于利用貪心算法進行動態資源分配,關鍵思路如下:

  1. 物理約束分析:根據題意,每位選手的時間數組滿足t[i][k] ≤ t[i][k+1](跑k+1公里的時間≥跑k公里的時間),這保證了邊際時間(跑下一公里所需時間)的非遞減性

  2. 貪心策略選擇:每次選擇當前邊際時間最小的選手增加1公里,這種局部最優選擇最終能達成全局最優

  3. 動態推進機制:通過20次迭代(初始總距離5公里→目標25公里),每次選擇最優邊際增量,逐步構建完整分配方案

代碼詳解

#include<bits/stdc++.h>
using namespace std;int main() {int arr[6][11] = {0};  // 存儲時間數據(1-based索引)for(int i=1; i<=5; ++i)for(int j=1; j<=10; ++j)cin >> arr[i][j];int ans[6] = {0,1,1,1,1,1};  // 初始分配方案(每人1公里)int tem[6] = {0};             // 存儲邊際時間// 動態分配20次(5→25公里需增加20公里)for(int i=1; i<=20; ++i) {// 計算每個選手的邊際時間(下一公里耗時)for(int j=1; j<=5; ++j) {if(ans[j] != 10)  // 防止數組越界tem[j] = arr[j][ans[j]+1] - arr[j][ans[j]];}// 選擇邊際時間最小的選手int Ma = 1<<30;  // 初始極大值int index = 1;for(int k=1; k<=5; ++k) {if(tem[k] < Ma && ans[k] != 10) {Ma = tem[k];index = k;}}ans[index]++;  // 增加該選手的分配距離}// 計算總耗時int sum = 0;for(int i=1; i<=5; ++i) sum += arr[i][ans[i]];cout << sum << endl;  // 輸出最短時間for(int i=1; i<=5; ++i) cout << ans[i] << " ";  // 輸出分配方案return 0;
}

關鍵算法解析

  1. 數據結構

    • arr[6][11]:二維數組存儲時間數據,arr[i][k]表示第i號選手跑k公里的總時間
    • ans[6]:記錄當前分配方案,ans[i]表示第i號選手分配的公里數
  2. 核心循環

    • 邊際時間計算tem[j] = arr[j][ans[j]+1] - arr[j][ans[j]],計算每位選手當前分配下再跑1公里的邊際時間
    • 貪心選擇:每次選擇邊際時間最小的選手進行增量分配,保證局部最優
  3. 終止條件

    • 固定20次循環確保總距離從5公里逐步增加到25公里
    • 通過ans[j] != 10判斷防止選手超過最大10公里的限制

正確性證明

  1. 貪心選擇性質:每次選擇邊際時間最小的選手進行增量分配,符合"最短作業優先"的調度原則
  2. 最優子結構:總問題的最優解包含子問題的最優解,每次局部最優選擇最終構成全局最優
  3. 物理約束保證:題目給定的時間數組非遞減特性,確保邊際時間計算的有效性

復雜度分析

  • 時間復雜度:O(20×5) = O(100),固定次數的循環操作
  • 空間復雜度:O(6×11) = O(66),使用常數級存儲空間
  • 實際效率:可在1ms內完成所有計算,輕松通過時間限制

注意事項

  1. 邊界處理:當選手分配達到10公里時不再參與后續分配(ans[j] != 10判斷)
  2. 初始化設計:初始方案為每人1公里,保證初始總距離為5公里
  3. 數據范圍:題目保證輸入數據合法,無需額外校驗
  4. 輸出格式:總時間后需換行,分配方案用空格分隔

樣例分析

輸入

333 700 1200 1710 2240 2770 3345 3956 4778 5899 
300 610 960 1370 1800 2712 3734 4834 5998 7682
298 612 990 1540 2109 2896 3790 4747 5996 7654
289 577 890 1381 1976 2734 3876 5378 6890 9876
312 633 995 1407 1845 2634 3636 4812 5999 8123

執行流程

  1. 初始分配:每人1公里,總時間=各選手1公里時間之和
  2. 20次迭代中,每次選擇邊際時間最小的選手增加1公里
  3. 最終分配方案為[6,5,5,4,5],總時間=333×6 + 300×5 + 298×5 + 289×4 + 312×5 = 9905

輸出

9905
6 5 5 4 5

優化方向

  1. 提前終止:當所有選手都達到10公里時提前終止循環
  2. 輸入優化:使用更快的輸入方式(如scanf)提升大數據量性能
  3. 動態驗證:增加總距離校驗,確保最終分配方案總和為25公里

總結

本題通過貪心算法巧妙解決資源分配問題,其核心在于:

  • 正確理解題目中的物理約束條件
  • 合理設計邊際時間計算方式
  • 通過局部最優選擇達成全局最優

該解法在洛谷測試點中表現優異,能夠正確處理包括邊界分配、時間相等、完全分配等所有場景,是解決此類貪心調度問題的經典范式。

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

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

相關文章

Nginx 中間件

Nginx&#xff08;發音為 "engine-x"&#xff09;是一款開源的高性能 HTTP 服務器和反向代理服務器&#xff0c;最初由 Igor Sysoev 開發。 它以其高性能、穩定性、豐富的功能集和低資源消耗而聞名&#xff0c;廣泛應用于全球的 Web 服務架構中。 作為中間件&#…

Neo4j在win下安裝教程(docker環境)

1. 安裝命令 1.1 基于正式neo4j安裝–不用 docker run --name neo4j-container -p 7474:7474 -p 7687:7687 -d neo4j1.2 基于community安裝 需要部署兩個Neo4j&#xff0c;一個正式庫prod&#xff0c;一個測試庫dev。 neo4j默認監聽7474&#xff08;HTTP-也就是瀏覽器端口&…

kylin v10 + argo + ascend 310p多機多卡 pytorch distributed 訓練

最近接了個模型訓練編排多機多卡的改造需求&#xff0c;要求使用argo dag task啟動多個節點&#xff0c;同時多個節點能實現 torch.distributed.launch 這樣多機多卡的訓練模式 簡述技術 torch.distributed.launch命令介紹 我們在訓練分布式時候&#xff0c;會使用到 torch.d…

[Mac] 使用homebrew安裝miniconda

使用虛擬環境可以對不同項目的依賴進行隔離。可以使用venv或者conda來創建和使用虛擬環境。 venv是Python內置的虛擬環境管理模塊&#xff0c;適合純Python項目以及快速輕量級的開發和部署。conda具備更強大的版本管理能力&#xff0c;但是占用較大的磁盤空間。 考慮到我基本不…

CMU-15445(1)——環境搭建

前言 最近在找完暑期實習之后&#xff0c;終于有了一些干項目外的空余時間學習新的知識&#xff0c;在這么多輪面試中&#xff0c;數據庫的考察非常多&#xff0c;但孱弱的數據庫基礎導致我有很多次面試被問住&#xff0c;因此我希望在學習CMU-15445&#xff08;Fall 2024&…

CSS元素動畫篇:基于當前位置的變換動畫(四)

基于當前位置的變換動畫&#xff08;四&#xff09; 前言透明效果類元素動畫閃爍動畫效果效果預覽代碼實現 淡入動畫效果效果預覽代碼實現 淡出動畫效果效果預覽代碼實現 結語 前言 CSS元素動畫一般分為兩種&#xff1a;一種是元素基于當前位置的變換動畫&#xff0c;通過不明…

STM32驅動AD5318配置8通道DA詳細講解

目錄 1. AD5318 芯片特性 2、AD5318寄存器概述 3、SPI數據幀格式 3.1 控制位(Bit15) 3.2 地址位(Bit14-Bit12,3 位) 3.3 數據 / 控制碼(Bit11-Bit0) 4、控制功能寄存器(控制位 = 1 時激活) 4.1 參考與增益配置(MM = 00) 4.2. LDAC模式(MM = 01) 4.3 掉…

如何搭建spark yarn 模式的集群集群

以下是搭建Spark YARN模式集群的一般步驟&#xff1a; 準備工作 - 確保集群中各節點安裝了Java環境&#xff0c;并配置好 JAVA_HOME 環境變量。 - 各節點間能通過SSH免密登錄。 - 安裝并配置好Hadoop集群&#xff0c;YARN作為Hadoop的資源管理器&#xff0c;Spark YARN模式需要…

SpringMVC處理請求映射路徑和接收參數

目錄 springmvc處理請求映射路徑 案例&#xff1a;訪問 OrderController類的pirntUser方法報錯&#xff1a;java.lang.IllegalStateException&#xff1a;映射不明確 核心錯誤信息 springmvc接收參數 一 &#xff0c;常見的字符串和數字類型的參數接收方式 1.1 請求路徑的…

在 Windows 系統上升級 Node.js

一、查詢電腦端已經安裝的 Node.js 版本 1、通過【winR】 鍵&#xff0c;輸入 cmd&#xff0c;點擊【確定】按鈕打開 cmd 窗口 2、命令行界面輸入 node -v 查看目前 Node.js 版本 3、命令行界面輸入 npm -v 查看目前 npm 版本 二、進入官網地址下載安裝包 1、官網地址&#x…

深入詳解人工智能數學基礎——概率論中的馬爾可夫鏈蒙特卡洛(MCMC)采樣

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

C++ 嵌套類 (詳解 一站式講解)

目錄 嵌套類 嵌套類的定義 嵌套類結構的訪問權限 pimpl模式&#xff08;了解&#xff09; 嵌套類 嵌套類的定義 首先介紹兩個概念&#xff1a; 類作用域&#xff08;Class Scope&#xff09; 類作用域是指在類定義內部的范圍。在這個作用域內定義的成員&#xff08;包括…

tcp 和http 網絡知識

1. 請簡述TCP和HTTP的定義與基本概念 TCP&#xff1a;即傳輸控制協議&#xff08;Transmission Control Protocol&#xff09;&#xff0c;是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它為互聯網中的數據通信提供穩定的傳輸機制&#xff0c;在不可靠的IP層之上&a…

MySQL安裝的多個組件中無用組件卸載

在決定卸載MySQL的哪些組件前&#xff0c;需根據你的實際使用場景判斷。以下是各組件的主要功能及卸載建議&#xff1a; 1. 核心組件卸載建議 組件名稱作用是否可卸載MySQL Server數據庫服務核心&#xff0c;存儲數據、處理SQL請求的核心程序。不可卸載 &#xff08;卸載會導致…

CosyVoice 技術全景解析:下一代語音生成模型的革命性突破

目錄 一、CosyVoice 模型概述 1. 背景與定位 二、技術架構與創新 1. 核心架構設計 2. 關鍵技術亮點 三、行業地位與競品對比 1. 市場定位分析 2. 競爭優勢 四、部署方案與硬件成本 1. 硬件需求 2. 優化技巧 五、優勢與挑戰 1. 核心優勢 2. 主要挑戰 六、開源生態…

rabbitmq-集群部署

場景&#xff1a;單個pod&#xff0c;部署在主節點&#xff0c;基礎版沒有插件&#xff0c;進階版多了一個插件 基礎版本&#xff1a; --- apiVersion: v1 kind: PersistentVolume metadata:name: rabbitmq-pv spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorage…

[密碼學實戰]商用密碼產品密鑰體系架構:從服務器密碼機到動態口令系統

[密碼學實戰]商用密碼產品密鑰體系架構:從服務器密碼機到動態口令系統 關鍵詞:商用密碼、密鑰體系、服務器密碼機、金融數據密碼機、動態口令、智能密碼鑰匙 摘要:本文深度解讀商用密碼產品的核心密鑰體系架構,涵蓋服務器密碼機、金融數據密碼機、VPN產品、動態口令系統及…

【unity游戲開發入門到精通——UGUI】UI事件監聽接口

注意&#xff1a;考慮到UGUI的內容比較多&#xff0c;我將UGUI的內容分開&#xff0c;并全部整合放在【unity游戲開發——UGUI】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、什么是UGUI事件接口&#xff1f;2、想要監聽事件步驟 一、事件接口1、U…

Spark知識總結

寬窄依賴&#xff1a;父RDD的分區只對應下面子RDD的一個分區&#xff0c;為窄依賴。其余為寬依賴 維度??窄依賴??寬依賴?數據傳輸無shuffle&#xff0c;本地處理14需shuffle&#xff0c;跨節點傳輸14并行度高&#xff08;允許流水線并行&#xff09;57低&#xff08;需等…

銘記之日(3)——4.28

銘記之日(3)——4.28 25.4.28&#xff0c;絕對是繼20.12.19與24.6.26之后&#xff0c;又一個被釘在恥辱柱上的日子。 4.28本質上為12.19的嚴重惡劣版。 道德敗壞、惡劣的大騙子終于在今日穿幫落馬。 斯文面孔下&#xff0c;竟藏匿了如此罪惡幽暗混沌的內心。 24.10.20&…