洗完咖啡杯的最早時間

題目描述:給定一個數組arr,arr[i]代表第i號咖啡機泡一杯咖啡的時間,給定一個正數N,表示N個人在等著咖啡機,每臺咖啡機只能一個一個的泡咖啡,其次,只有一臺咖啡機可以洗杯子,一次只能洗一個杯子,時間耗費a,洗完才能洗下一杯子,每個咖啡杯也可以自己揮發干凈,時間耗費b,咖啡杯可以并行揮發,假設所有人拿到咖啡之后立刻喝完,返回從開始等到所有咖啡機變干凈的最短時間,有4個參數,arr, N, a, b。

way:

//drinks是每人喝完咖啡的最早時間,也是杯子們可以開始洗的最早時間
//wash 洗一個杯子需要的時間(串行)
//air  揮發干凈的時間(并行)
//washLine  洗杯子的機器可以洗的時間點(也就是洗杯子的咖啡機空閑的時間點)
//index之前的杯子都洗過了,drinks[index...]的杯子都變干凈的最早結束時間
#include<iostream>
#include<vector>
#include<queue>
using namespace std;struct Machine
{//機器工作的時間點int timePoint;//泡一杯咖啡的時間int workTime;Machine(int timePoint, int workTime){this->timePoint = timePoint;this->workTime = workTime;}
};struct comp
{bool operator()(Machine *a, Machine *b){return a->timePoint+a->workTime < b->timePoint+b->workTime;}
};//drinks是每人喝完咖啡的最早時間,也是杯子們可以開始洗的最早時間
//wash 洗一個杯子需要的時間(串行)
//air  揮發干凈的時間(并行)
//washLine  洗杯子的機器可以洗的時間點(也就是洗杯子的咖啡機空閑的時間點)
//index之前的杯子都洗過了,drinks[index...]的杯子都變干凈的最早結束時間
int process(vector<int>drinks, int index, int wash, int air, int washLine)
{if(index == drinks.size()){return 0;}//index號杯子決定洗int time1=max(drinks[index], washLine)+wash;int time2=process(drinks, index+1, wash, air, time1);int p1=max(time1, time2);//index號杯子決定揮發,咖啡機不用等int time3=drinks[index]+air;int time4=process(drinks, index+1, wash, air, washLine);int p2=max(time3,time4);return min(p1,p2);
}int minTime(vector<int>arr, int N, int a, int b)
{//小根堆priority_queue<Machine*,vector<Machine*>, comp>que;vector<int>drinks(N);for(int i=0; i<arr.size(); i++){que.push(new Machine(0,arr[i]));}//N個人最早喝完咖啡的時間存到drinks數組中for(int i=0; i<N; i++){Machine *machine = que.top();que.pop();machine->timePoint+=machine->workTime;drinks[i]=machine->timePoint;que.push(machine);}return process(drinks, 0, a, b, 0);
}

way2:改dp。

//index從大往小填
int minTimeDp(vector<int>drinks, int wash, int air)
{//找到washLine的最大值是多少int nMax=0;for(int i=0; i<drinks.size(); i++){//每個杯子都洗的最大時間,如果還沒喝,等喝完再洗,如果咖啡機在洗上一個杯子,等上一個杯子洗完再洗nMax=max(nMax+wash, drinks[i]+wash);}int N=drinks.size();vector<vector<int>>dp(N+1,vector<int>(nMax+1));for(int index=N-1; index>=0; index--){for(int free=0; free<=nMax; free++){int time1=max(drinks[index], free)+wash;if(time1>nMax){//這種情況沒可能吧break;}//index號杯子決定洗int time2=dp[index+1][time1];int p1=max(time1, time2);//index號杯子決定揮發int time3=drinks[index]+air;int time4=dp[index+1][free];int p2=max(time3, time4);dp[index][free]=min(p1,p2);}}return dp[0][0];
}int minTime2(vector<int>arr, int N, int a, int b)
{priority_queue<Machine*,vector<Machine*>, comp>que;vector<int>drinks(N);for(int i=0; i<arr.size(); i++){que.push(new Machine(0,arr[i]));}//N個人最早喝完咖啡的時間存到drinks數組中for(int i=0; i<N; i++){Machine *machine = que.top();que.pop();machine->timePoint+=machine->workTime;drinks[i]=machine->timePoint;que.push(machine);}return minTimeDp(drinks, a,b);
}

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

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

相關文章

1.OLED

1.基礎知識

kotlin重復類編譯報錯解決

Duplicate class org.jetbrains.annotations.TestOnly found in modules annotations-12.0 (com.intellij:annotations:12.0) and annotations-13.0 (org.jetbrains:annotations:13.0) Go to the documentation to learn how to <a href"d.android.com/r/tools 參考鏈…

網絡拓撲—DHCP服務配置

文章目錄 DHCP服務搭建相關配置細節前提安裝DHCP服務 DHCP服務搭建 相關配置細節前提 系統&#xff1a;Windows Server 2003 IP網段&#xff1a;10.0.0.0/24 三臺機子&#xff1a; 普通PC機 DHCP服務器 路由器&#xff08;兩塊網卡&#xff0c;連接內外網&#xff09; //注…

覆蓋索引與復合索引 小記

表 t_1 有一個復合索引 (user_id,create_time) 執行以下SQL SELECT COUNT(1) FROM t_1 WHERE create_time > 2024-01-10 AND create_time < 2024-05-25 ;看似不滿足復合索引最左前綴的條件,但依然會使用復合索引(user_id,create_time), 滿足覆蓋索引. 但如果是執行以…

【Unity】Unity項目轉抖音小游戲(三)資源分包,抖音云CDN

業務需求&#xff0c;開始接觸一下抖音小游戲相關的內容&#xff0c;開發過程中記錄一下流程。 使用資源分包可以優化游戲啟動速度&#xff0c;是抖音小游戲推薦的一種方式&#xff0c;抖音云也提供存放資源的CDN服務 抖音云官方文檔&#xff1a;https://developer.open-douyi…

基于灰狼優化算法優化支持向量機(GWO-SVM)時序預測

代碼原理及流程 基于灰狼優化算法優化支持向量機&#xff08;GWO-SVM&#xff09;的時序預測代碼的原理和流程如下&#xff1a; 1. **數據準備**&#xff1a;準備時序預測的數據集&#xff0c;將數據集按照時間順序劃分為訓練集和測試集。 2. **初始化灰狼群體和SVM模型參數…

LeetCode 47.全排列 II

LeetCode 47.全排列 II 1、題目 題目鏈接&#xff1a;47. 全排列 II 給定一個可包含重復數字的序列 nums &#xff0c;按任意順序 返回所有不重復的全排列。 示例 1&#xff1a; 輸入&#xff1a;nums [1,1,2] 輸出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff…

《基于Jmeter的性能測試框架搭建》改進一

《基于Jmeter的性能測試框架搭建》文末筆者提到了不少待改進之處&#xff0c;如下所示。 Grafana性能圖表實時展現&#xff0c;測試過程中需實時截圖形成測試報告&#xff0c;不夠人性化。解決方案&#xff1a;自動生成測試報告并郵件通知。 Grafana性能圖表需測試人員實時監控…

Big Demo Day第十三期活動即將啟幕,Web3創新項目精彩紛呈,PEPE大獎等你抽取

5月28號在香港數碼港 Big Demo Day第十三期 活動即將拉開帷幕&#xff0c;活動將匯集眾多Web3領域的創新項目&#xff0c;為參會者帶來一場科技與智慧交融的盛宴。在這里&#xff0c;你不僅能深入了解區塊鏈、AI等前沿技術的最新應用&#xff0c;還能有機會贏取豐厚的PEPE大獎。…

免費wordpress中文主題

免費大圖wordpress主題 首頁是一張大圖的免費wordpress主題模板。簡潔實用&#xff0c;易上手。 https://www.jianzhanpress.com/?p5857 免費WP模板下載 頂部左側導航條的免費WP模板&#xff0c;后臺簡潔&#xff0c;新手也可以下載使用。 https://www.jianzhanpress.com/…

sizeof的了解

32位編譯器 qDebug() << "int:" << sizeof(int);qDebug() << "char:" << sizeof(char);qDebug() << "char*:" << sizeof(char*); 字節數&#xff1a; int: 4 char: 1 char*: 4 64位編譯器 字節數&#…

全棧:用戶登錄驗證,用戶注冊【數據庫】

前端用戶登錄界面 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</tit…

電腦版網易云音樂聽歌識曲

文章目錄 流程 流程 電腦網易云音樂的搜索框旁邊就是聽歌識曲功能

文件上傳鞏固及流量分析

1.[GXYCTF2019]BabyUpload 1&#xff09;打開題目也是沒有任何提示&#xff0c; 2&#xff09;進入環境&#xff0c;看到下面頁面猜測是文件上傳漏洞&#xff0c;下面開始傳文件 3&#xff09;首先上傳一句話木馬 a.php&#xff0c;代碼如下&#xff1a; 下面這個代碼中并沒有…

Amesim示例篇-案例1:空間中的鋁塊散熱

前言 本文將通過一個案例繼續對Thermal庫的元件進一步講解。 案例1&#xff1a;一個300mm*300mm*1000mm&#xff08;長*寬*高&#xff09;的鋁板初始溫度為45℃&#xff0c;豎直在環境為25℃的空間內靜置60min。對流換熱系數設置為5W/m2K。本文將通過兩種建模方法對鋁塊的溫度…

微軟語音使用小計

簡介 使用微軟語音可以實現語音轉文字和文字轉語音。測試了下&#xff0c;使用還是挺方便的。 使用微軟語音有兩種方式。一種是使用命令行的形式&#xff0c;另一種是調用SDK的方式。 適合使用語音 CLI 的情況&#xff1a; 想在極少設置且無需編寫代碼的情況下試驗語音服務…

最簡單的方式解決android studio 模擬器無法聯網的問題

最簡單的方式解決android studio 模擬器無法聯網的問題 看了網上很多解決android studio內置模擬器無法聯網的問題&#xff0c;基本上都是在模擬器手機上配置dns&#xff0c;個人試了多種辦法也連不上網&#xff0c;現在給出一種&#xff0c;僅需要在命令行操作的解決安卓模擬…

輕松拿捏C語言——二分查找

&#x1f970;歡迎關注 輕松拿捏C語言系列&#xff0c;來和 小哇 一起進步&#xff01;? &#x1f308;感謝大家的閱讀、點贊、收藏和關注&#x1f495; 目錄&#x1f389; 一、介紹&#x1f308; 二、步驟&#x1f319; 三、代碼?? 一、介紹 二分查找是一種在有序數組中…

【Linux-驅動開發】

Linux-驅動開發 ■ Linux-應用程序對驅動程序的調用流程■ Linux-file_operations 結構體■ Linux-驅動模塊的加載和卸載■ 1. 驅動編譯進 Linux 內核中■ 2. 驅動編譯成模塊(Linux 下模塊擴展名為.ko) ■ Linux-■ Linux-■ Linux-設備號■ Linux-設備號-分配■ 靜態分配設備號…

React Native 之 主題偏好(十一)

如果你的 React Native 版本較新&#xff0c;它提供一個主題API useColorScheme&#xff0c;你可以直接使用它。如果不是&#xff0c;需安裝額外的庫&#xff0c;如react-native-appearance。 下面是一個使用 react-native-appearance&#xff08;或 useColorScheme&#xff0…