洗完咖啡杯的最早时间

题目描述:给定一个数组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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…