華為OD機試題-貪心歌手

題目解析

題目描述
歌手準備從 A 城去 B 城參加演出

  1. 按照合同,他必須在 T 天內趕到。
  2. 歌手途徑 N 座城市。歌手不能往回走。
  3. 每兩座城市之間需要的天數都可以提前獲知。
  4. 歌手在每座城市都可以在路邊賣唱賺錢。經過調研,歌手提前獲知了每座城市賣唱的收入預期。如果在一座城市第一天賣唱可以賺 M,后續每天的收入會減少 D (第二天賺的錢是 M-D,第三天是 M-2D…)。如果收入減到 0 就不會再少了。
  5. 歌手到達后的第二天才能開始賣唱。如果今天賣過唱,第二天才能出發(即按整天算)。

輸出
輸出歌手在旅途中最多能掙多少錢。

輸入描述
第一行兩個數字 T 和 N,中間用空格隔開。

T 代表總天數,0 < T < 1000N 代表路上經過 N 座城市,0 < N < 100

第二行 N+1 個數字,中間用空格隔開。代表每兩座城市之間耗費的時間。其總和 ≤ T。

接下來 N 行,每行兩個數字 M 和 D,中間用空格隔開。代表每個城市的輸入預期。

0 < M < 10000 < D < 100

示例

輸入:
10 2
1 1 2
120 20
90 10輸出:
540

說明

  • 總共 10 天,路上經過 2 座城市。 路上共花 1+1+2=4 天。
  • 剩余 6 天最好的計劃是在第一座城市待 3 天,在第二座城市待 3 天。 在第一座城市賺的錢:120 + 100 + 80 = 300 在第二座城市賺的錢:90 + 80 + 70 = 240
  • 共 300 +240 = 540

題解

題目已經告訴了總天數T、走完整個旅途在路上所需的天數roadCost,因此可以知道 在途中唱歌賣藝掙錢的天數remain
也就是說,題目可以轉換為,在remain天內,最多可以掙多少錢。
旅途中,每天可以掙錢數目為:

m1, m1-d1, .... (m1- remain*d1) 
...
mn, mn-dn, .... (mn- remain*dn) 【每個元素都需要>0】

即,是在上面的范圍內選擇。因此有兩種思路:(都是貪心思路,每次都選取當前最優解)

  1. 將上面的選項數值全部先計算出來,然后選取其中前remain個最大的,然后算出總和就可以得到結果;
  2. 使用(最小堆)優先隊列,將這些結果依次裝入隊列中, 如果當前待裝入的值:(即,每次裝入的值要盡可能的大)
    • 大于隊列中的最小值,則將該最小值拋棄,接納該待裝入的值;
    • 小于隊列中的最小值,則什么都不做。

到最后,隊列中剩余的remain個元素,就是選項范圍內的前remian個最大的值,算出總和就是結果。

代碼:

public class Greedy_Singer {static int t; // 總天數static int n; // 城市數量static int roadCost; // 旅途中花費在路上的時間static int[][] mds; // 每個城市的 預期收入 與 遞減值public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 讀取 總天數t 和 城市數量nt = sc.nextInt();n = sc.nextInt();// 讀取 城市間的旅行時間,并計算花費在路上的時間 roadCostroadCost = 0;for (int i = 0; i < n+1; i++) {roadCost += sc.nextInt();}// 讀取每個城市的收入預期M 和 遞減值Dmds = new int[n][2];for (int i = 0; i < n; i++) {mds[i][0] = sc.nextInt();mds[i][1] = sc.nextInt();}// 輸出最大收益System.out.println(getResult());}public static int getResult() {// 計算用于賣唱的時間(天)int remain = t - roadCost;// 如果剩余天數 ≤0,則直接返回0if (remain <= 0) {return 0;}// 使用優先隊列(最小堆)來存儲收益PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> a - b);// 遍歷每個城市for (int[] md : mds) {int m = md[0];int d = md[1];// 計算每天的收益,并將其添加到優先隊列中while (m > 0) {// (貪心選取,當隊列滿了(隊列大小 = 剩余天數)之后,需要每次選取當前可知的較大者)// 如果 優先隊列大小 已經 達到剩余天數了,則需要比較當前收益 與 隊列中最小值if (pq.size() >= remain) {if (m > pq.peek()) {pq.poll(); // 彈出最小值} else {break; // 如果當前收益小于隊列中的最小值,則不添加 當前的這個值}}pq.add(m); // 將當前收益添加到隊列中m -= d;}}// 計算出優先隊列中所有收益的總和return pq.stream().reduce(Integer::sum).orElse(0);}
}

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

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

相關文章

C# AOP面向切面編程

AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面編程&#xff09;是一種編程范式&#xff0c;旨在將橫切關注點&#xff08;Cross-cutting Concerns&#xff09;從業務邏輯中分離出來。在傳統的面向對象編程中&#xff0c;橫切關注點&#xff08;如日志記錄、…

R包:蛋白質組學質控評估PTXQC包

介紹 PTXQC包是2016年發表在J Proteome Res期刊上的R包&#xff0c;它主要是對MaxQuant輸出結果進行提取處理從而獲得評估蛋白質質量結果。 安裝 從github安裝&#xff0c;安裝過程會自動構建tutorial。 devtools::install_github("cbielow/PTXQC", build_vignet…

AI數字人直播saas系統源碼部署火爆!無人直播系統全攻略

隨著直播行業的日益興盛&#xff0c;各種直播模式和玩法不斷涌現。其中&#xff0c;AI數字人直播更是憑借著其在降本增效的獨特優勢而在眾多直播模式中脫穎而出&#xff0c;成為了眾多企業已經引進或計劃引進的新型技術。而各大數字人源碼廠商推出的AI數字人直播saas系統源碼部…

面試題07-09

知道了 InnoDB 的索引實現后&#xff0c;就很容易明白為什么不建議使用過長的字段作為主鍵&#xff0c;因為所有輔助索引都引用主索引&#xff0c;過長的主索引會令輔助索引變得過大。再例如&#xff0c;用非單調的字段作為主鍵在 InnoDB 中不是個好主意&#xff0c;因為 InnoD…

走拼箱貨必看海運拼箱的實用技巧

在國際海運運輸中&#xff0c;海運拼箱適用于貨物數量較少或體積不足以填滿整個集裝箱的情況。 海運拼箱貨物通常由物流公司或貨代進行組織和管理。多個貨主的貨物通過合理拼裝&#xff0c;使集裝箱空間得到充分利用。 那么&#xff0c;在海運拼箱和整柜有哪些不同&#xff0c…

Linux -- 認識gcc/g++、代碼的編譯過程

目錄 前言&#xff1a; 使用 gcc/g&#xff1a; 代碼的編譯過程&#xff1a; 預處理&#xff1a; 頭文件展開&#xff1a; 宏替換去注釋&#xff1a; ?編輯 條件編譯&#xff1a; 編譯&#xff1a; 匯編&#xff1a; 鏈接&#xff1a; 動態庫&#xff08;動態鏈…

使用Simulink基于模型設計(二):系統定義和布局

Simulink模型的頂層系統布局是許多工程團隊可以使用的公共環境&#xff0c;是基于模型的設計范式&#xff1a;分析、設計、檢驗和實現。您可以通過確定模型的結構和各個組件來定義頂層系統。然后&#xff0c;您可以將模型按照層次結構進行組織&#xff0c;分別與系統的各個組件…

【鴻蒙學習筆記】交互事件

官方文檔&#xff1a;交互事件 目錄標題 分類交互事件-觸屏交互事件-手勢事件單一手勢 分類 交互事件-觸屏 在組件上按下(Down) , 滑動(Move) , 抬起(up)時觸發的回調事件。包括點擊事件、觸摸事件和拖拽事件 交互事件-手勢事件 在手機上點擊打開應用 , 長按后拖動應用 , 這…

自動化數據集成的BI工具,為你提供決策洞察力

傳統的商業智能&#xff08;BI&#xff09;報表系統采用的是“業務提報表需求&#xff0c;IT進行開發”的模式。決策管理者和業務人員提出用報表等來展示經營管理數據的需求&#xff1b;接著IT響應需求&#xff0c;進行需求溝通、數據處理加工、報表開發等主體工作&#xff1b;…

使用java代碼取本月第一個工作日

根據參數或當前月&#xff0c;獲取本月第一個工作日 文章目錄 根據參數或當前月&#xff0c;獲取本月第一個工作日前言一、根據當前日期獲取當前月的第一個工作日二、根據參數日期&#xff0c;獲取參數月的第一個工作日。總結 前言 這里我們列舉兩個方法&#xff1a; 1、沒有參…

RFID資產管理系統 RFID固定資產管理系統

大多數企業都曾被固定資產管理“難”的問題困擾&#xff1a;賬物不符、查詢不便、盤點耗時……因此&#xff0c;越來越多的企業選擇用資產管理系統&#xff0c;來實現資產智能化管理。 RFID資產管理系統方案是針對大多數企業存在的資產管理痛點&#xff0c;采用RFID技術&#…

uni-app三部曲之三: 路由攔截

1.引言 路由攔截&#xff0c;個人理解就是在頁面跳轉的時候&#xff0c;增加一級攔截器&#xff0c;實現一些自定義的功能&#xff0c;其中最重要的就是判斷跳轉的頁面是否需要登錄后查看&#xff0c;如果需要登錄后查看且此時系統并未登錄&#xff0c;就需要跳轉到登錄頁&…

Python地震波逆問題解構算法復雜信號分析

&#x1f3af;要點 &#x1f3af;時域、時頻域以及時間和頻率相關聯偏振特性分析三種算法 | &#x1f3af;時域波參數估計算法 | &#x1f3af;機器學習模型波形指紋分析算法 | &#x1f3af;色散曲線和頻率相關波分析算法 | &#x1f3af;動態傾斜校正算法 | &#x1f3af;聲…

【JS|第21期】JavaScript模塊化:深入解析三種文件暴露方式

日期:2024年7月6日 作者:Commas 簽名:(? ?_?)? 積跬步以致千里,積小流以成江海…… 注釋:如果您覺得有所幫助,幫忙點個贊,也可以關注我,我們一起成長;如果有不對的地方,還望各位大佬不吝賜教,謝謝^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083…

前后端項目部署方案匯總

前端項目 1、本地打包部署 # 本地打包部署到線上服務器 npm run build && \ rsync -r ./dist/* root127.0.0.1:/www/www.demo.com/www2、服務器端打包部署 步驟 拉取代碼 -> 安裝依賴 -> 打包編譯 -> 拷貝到運行目錄 -> 發送成功消息shell命令 git pu…

新手小白報考學習PMP會遇到哪些“坑”?

PMP考試的陷阱實際上與其他大型證書考試差不多&#xff0c;主要是在選擇培訓機構和各種收費方面會遇到一些坑。 首先&#xff0c;并不是每個人都能經歷這些坑&#xff0c;因為PMP考試有一定的門檻。 作為引進國外的考試&#xff0c;報名都有中英文之分&#xff0c;所以先來看…

STM32的 DMA(直接存儲器訪問) 詳解

STM32的DMA&#xff08;Direct Memory Access&#xff0c;直接存儲器存取&#xff09;是一種在單片機中用于高效實現數據傳輸的技術。它允許外設設備直接訪問RAM&#xff0c;不需要CPU的干預&#xff0c;從而釋放CPU資源&#xff0c;提高CPU工作效率&#xff0c;本文基于STM32F…

[極客大挑戰 2019]RCE ME

[極客大挑戰 2019]RCE ME <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($code); } else{highlight_f…

(附源碼)c#+winform實現遠程開機(廣域網可用)

實現邏輯 利用UDP協議發送特定格式的魔術包&#xff0c;以遠程喚醒具有特定MAC地址的目標計算機。目標計算機的BIOS和網絡配置需要支持Wake-on-LAN&#xff08;WOL&#xff09;功能&#xff0c;并且需要在目標計算機上配置正確的網絡喚醒設置。 源碼在最后 準備工作 進入Bio…

力學有限元的基石:虛功原理的推導

推導虛功方程的過程 彈性力學的平衡方程 在張量形式中&#xff0c;平衡方程為&#xff1a; ? ? σ b 0 \nabla \cdot \sigma b 0 ??σb0 用下標表示為&#xff1a; ? σ i j ? x j b i 0 \frac{\partial \sigma_{ij}}{\partial x_j} b_i 0 ?xj??σij??b…