进程调度的题解

目录

原题大意:

题目描述:

输入格式:

输出格式:

样例输入:

样例输出:

数据规模:

题目大意:

主要思路:

dp的转移:

dp初始化:

代码:


原题大意:

题目描述:

某台计算机有两个 CPU。现在有 n 个进程需要执行,而进程只有 k 种(编号为 1~k)。

第 i 种进程在任意一个 CPU 上执行时,如果该 CPU 上执行的前一个进程也是第 i 种,则只需要花费 hot_i 时间;如果不是第 i 种,则需要花费cold_i时间。

现在你需要做进程调度,依次执行完 1~n 的进程。

需要注意,必须当第 i 个进程执行完之后,你才能安排第 i+1 个进程。请问执行完所有进程的最少时间是多少呢?

输入格式:

第一行包含一个整数 T,表示数据组数。

每组数据第一行包括两个数 n 和 k,接下来一行 n 个整数,表示每个进程是哪一种进程,接下来一行 k 个整数,表示 cold_1~cold_k,再接下来一行 k 个整数hot_1~hot_k​。

输出格式:

输出 T 行,每行一个整数,表示答案。

样例输入:

9

3 2

1 2 2

3 2

2 1

4 2

1 2 1 2

5 3

2 1

4 3

1 2 3 1

100 100 100

1 1 1

5 2

2 1 2 1 1

65 45

54 7

5 3

1 3 2 1 2

2 2 2

1 1 1

5 1

1 1 1 1 1

1000000000

999999999

5 6

1 6 1 4 1

3 6 4 1 4 5

1 1 1 1 4 1

1 3

3

4 5 6

1 2 3

8 3

3 3 3 1 2 3 2 1

10 10 8

10 10 5

样例输出:

6

11

301

225

8

4999999996

11

6

63 

数据规模:

1\le t \le 101\le n,k \le 10001 \le hot_i \le cold_i \le 10^9。 

题目大意:

给你多组数据,每组数据给你三个数组,让你安排进程,使得进程执行完的时间最小。

主要思路:

这一题用dp会好做,看上去很难,其实不难。dp[i][j] 代表对于前i个进程,选完第i个进程后,另一个CPU停留在j上,所用的最小时间。而且有个不起眼的小细节(一定会有一个CPU最后一个进程会停留在a[i-1]))

dp的转移:

这个难度也不大,首先是简单的:dp_{i,j} = \min(dp_{i,j},dp_{i-1,j}+(a_i==a_{i-1}?hot_{a_i}:cold_{a_i}))注意,这里用了三目运算符。

还有就是那个小细节:dp_{i,a_{i-1}} = \min(dp_{i,a_{i-1}},dp_{i-1,j}+(j == a_i?hot_{a_i}:cold_{a_i}))注意,这里也用了三目运算符。

dp初始化:

初始化成1e18,dp[0][0] 就应该是0。

代码:

#include<bits/stdc++.h>
using namespace std;
long long a[5010];
long long hot[5010],cold[5010];
long long dp[5010][5010];
//dp[i][j] 代表对于前i个进程,选完第i个进程后,另一个CPU停留在j上,而且一定会有一个CPU最后会停留在a[i-1]
int main()
{int t;cin>>t;while(t--){int n,k;cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=k;i++){cin>>cold[i];}for(int i=1;i<=k;i++){cin>>hot[i];}for(int i=0;i<=n+1;i++){for(int j=0;j<=k+1;j++){dp[i][j] = 1e18;}}dp[0][0] = 0;for(int i=1;i<=n;i++){for(int j=0;j<=k;j++)//k种进程 {dp[i][j] = min(dp[i][j],dp[i-1][j]+(a[i-1] == a[i]?hot[a[i]]:cold[a[i]]));//选当前的dp[i][a[i-1]] = min(dp[i][a[i-1]],dp[i-1][j]+(j == a[i]?hot[a[i]]:cold[a[i]]));//一定会有一个是a[i-1]的 }}long long ans=1e18;for(int i=0;i<=k;i++){ans = min(ans,dp[n][i]);}cout<<ans<<'\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/218042.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ源码 Broker-SubscriptionGroupManager 订阅组管理组件源码分析

前言 SubscriptionGroupManager 继承了ConfigManager配置管理组件&#xff0c;拥有将内存数据持久化到磁盘文件subscriptionGroup.json的能力。它主要负责维护所有消费组在内存中的订阅数据。 源码版本&#xff1a;4.9.3 源码架构图 核心数据结构 主要的数据结构比较简单&am…

云服务器Centos中安装Docker

云服务器Centos中安装Docker 1 简介DockerCentosCentos和Ubuntu区别 2 安装3 测试hello-world的镜像测试 1 简介 Docker Docker是一个开源的应用容器引擎&#xff0c;利用操作系统本身已有的机制和特性&#xff0c;可以实现远超传统虚拟机的轻量级虚拟化。它支持将软件编译成…

【AI】如何准备mac开发vue项目的环境

为了在Mac上开发Vue项目&#xff0c;你需要准备一些工具和环境。以下是主要的步骤&#xff1a; 安装Node.js和npm&#xff1a; Vue.js是一个基于JavaScript的框架&#xff0c;因此你需要Node.js环境。访问Node.js官网下载并安装Node.js&#xff0c;这也会自动安装npm&#xff0…

事务的四个特性、四个隔离级别以及数据库的常用锁

事务的四个特性、四个隔离级别以及数据库的常用锁 四大特性 事务的四大特性&#xff0c;通常被称为ACID特性&#xff0c;是数据库管理系统&#xff08;DBMS&#xff09;确保事务处理的关键属性。这四大特性分别是&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#x…

HHDESK个性化脚本功能

HHDESK可以把脚本配置在对话框中&#xff0c;生成按钮&#xff0c;便捷操作。 在界面下方的脚本框中&#xff0c;点击“”&#xff0c;选择新建&#xff1b; 随后在弹出框内填写名称及脚本&#xff0c;按需求选择填写参数&#xff0c;及运行过程中是否弹出参数框&#xff1b;…

Linux实用操作-上篇

Linux实用操作-下篇&#xff1a;Linux实用操作篇-下篇-CSDN博客 一、各类小技巧&#xff08;快捷键&#xff09; 1.1 ctrl c 强制停止 Linux某些程序的运行&#xff0c;如果想要强制停止它&#xff0c;可以使用快捷键ctrl c 命令输入错误&#xff0c;也可以通过快捷键ctr…

如何了解蜘蛛池蚂蚁SEO

蜘蛛池是一种基于搜索引擎优化的技术手段&#xff0c;通过模拟蜘蛛爬行行为来提高网站在搜索引擎中的排名&#xff0c;从而增加网站的流量和曝光率。 编辑搜图 如何联系蚂蚁seo&#xff1f; baidu搜索&#xff1a;如何联系蚂蚁SEO&#xff1f; baidu搜索&#xff1a;如何联…

Shell三剑客:文本过滤工具——grep

一、简介&#xff1a;过滤&#xff0c;查找文档中的内容 二、分类 grepegrep——扩展支持正则\w所有字母与数字&#xff0c;称为字符[a-zA-Z0-9] l[a-zA-Z0-9]*ve l\w*ve\W所有字母与数字之外的字符&#xff0c;称为非字符 love[^a-zA-Z0-9] love\W\b词边界 \<love\>…

优先考虑泛型

Java中的泛型&#xff08;Generics&#xff09;提供了一种参数化类型的机制&#xff0c;使得你可以编写更灵活、类型安全的代码。下面是一个例子&#xff0c;说明在Java中优先考虑泛型的好处&#xff1a; 考虑一个简单的容器类&#xff0c;它可以存储任意类型的元素&#xff0…

机器人、智能小车常用的TT电机/310电机/370电机选型对比

在制作智能小车或小型玩具时&#xff0c;在电机选型上一些到各种模糊混淆的概念&#xff0c;以及各种错综复杂的电机参数&#xff0c;本文综合对比几种常用电机的参数及特性适应范围&#xff0c;以便快速选型&#xff0c;注意不同生产厂家的电机参数规则会有较大差异。 普通TT…

调用win32 api获取电脑名字和系统目录

学习一下几个函数的功能&#xff0c;和调用方式&#xff1b; void CBasenameView::OnDraw(CDC* pDC) {CBasenameDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;TCHAR myname1[50], myname2[50], mydirname1[50], myd…

dp入门:从记忆化搜索到递推 灵神[基础算法精讲17]

198. 打家劫舍 链接 : 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解决 : 1.记忆化搜索(自顶向下) ; class Solution { public:int rob(vector<int>& nums) {// 记忆化搜索int n nums.size();vector<int> memo(n,-1); //…

Doris学习笔记

目录 简介 特点 MPP数据库 PB和EB都是用来衡量数据存储量的单位。 秒级响应 Google Mesa Apache Impala 支持标准sql且兼容mysql协议 ROLAP OLAP&#xff08;On-Line Analytical Processing&#xff0c;联机分析处理&#xff09; ROLAP&#xff08;Relational On-Line An…

【PWN】学习笔记(三)【返回导向编程】(中)

目录 课程回顾动态链接过程 课程 课程链接&#xff1a;https://www.bilibili.com/video/BV1854y1y7Ro/?vd_source7b06bd7a9dd90c45c5c9c44d12e7b4e6 课程附件&#xff1a; https://pan.baidu.com/s/1vRCd4bMkqnqqY1nT2uhSYw 提取码: 5rx6 回顾 管道符 | 把前一个指令的输出作…

最新盲盒交友脱单系统源码

盲盒交友脱单系统源码&#xff0c;学校 爱好 城市 地区 星座等等&#xff0c;首页轮转广告&#xff0c;页面美化&#xff0c;首页两款连抽高质量底部连抽&#xff0c;后台选择开关&#xff0c;邀请奖励爱心或者&#xff0c;提现达到金额有提成奖励&#xff0c;二级分销&#xf…

canvas基本绘制对象

目录 绘制画布 设置画布 绘制圆形 绘制矩形填充渐变色 绘制文字及文字样式 绘制画布 <canvas id"canvas" width"800" height"600"></canvas> 设置画布 //获得画布元素var canvasdocument.getElementById(canvas);var ctxca…

Python求小于m的最大10个素数

为了找到小于m的最大10个素数&#xff0c;我们首先需要确定m的值。然后&#xff0c;我们可以使用一个简单的算法来检查每一个小于m的数字是否是素数。 下面是一个Python代码示例&#xff0c;可以找到小于m的最大10个素数&#xff1a; def is_prime(n): if n < 1: …

DAP数据集成与算法模型如何结合使用

企业信息化建设会越来越完善&#xff0c;越来越体系化&#xff0c;当今数据时代背景下更加强调、重视数据的价值&#xff0c;以数据说话&#xff0c;通过数据为企业提升渠道转化率、改善企业产品、实现精准运营&#xff0c;为企业打造自助模式的数据分析成果&#xff0c;以数据…

乐益达教育网页

目录 一、网页效果 二、html代码 三、CSS代码 四、JS代码 一、网页效果 二、html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

excel数据重复率怎么计算【保姆教程】

大家好&#xff0c;今天来聊聊excel数据重复率怎么计算&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; excel数据重复率怎么计算 在Excel中计算数据重复率可以通过以下步骤实现&#xff1a; 1. 确定重复…