进程调度的题解

目录

原题大意:

题目描述:

输入格式:

输出格式:

样例输入:

样例输出:

数据规模:

题目大意:

主要思路:

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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能】人工智能中的Agent:法律虚拟助手简单示例

人工智能中的Agent&#xff1a;法律虚拟助手简单示例 随着人工智能技术的发展&#xff0c;Agent&#xff08;代理&#xff09;的概念在这个领域中变得愈发重要。在人工智能的应用中&#xff0c;Agent可以是一个系统、软件或机器人&#xff0c;能够执行特定的任务&#xff0c;理…

静态HTTP应用在社交媒体推广中的作用

在社交媒体日益盛行的今天&#xff0c;静态HTTP应用以其独特的特点&#xff0c;成为了社交媒体推广的一大利器。下面&#xff0c;我们就来聊聊静态HTTP应用在社交媒体推广中的作用。 一、快速响应&#xff0c;提升用户体验 静态HTTP应用以其快速响应的特点&#xff0c;为用户…

二叉树(接口函数的实现)

今天继续来分享的是二叉树&#xff0c;我们废话不多说&#xff0c;直接来看下面的几个接口函数&#xff0c;然后我们把他们实现&#xff0c;我们就掌握二叉树的二分之一&#xff08;今天粉丝破千了&#xff0c;属实有点高兴了&#xff09;。 typedef char BTDataType;typedef s…

Epicypher—CUTANA™ ChIC/CUTRUN Kit

核酸酶靶向切割和释放 (CUT&RUN)技术是由Steven henikoff博士团队开发的一种染色质图谱分析方法&#xff0c;基于Ulrich Laemmli博士的染色质免疫切割技术 (ChIC)&#xff0c;融合蛋白A与微球菌核酸酶 (pA-MNase)&#xff0c;选择性原位切割与抗体结合的染色质。在CUT&…

漏洞补丁存在性检测技术洞察

1、 漏洞补丁存在性检测技术是什么&#xff1f; 漏洞补丁存在性检测技术通俗的理解就是检测目标对象中是否包含修复特定已知漏洞的补丁代码&#xff0c;目标检测对象可能是源码&#xff0c;也能是二进制文件。 2、 漏洞补丁存在性检测技术业务背景 补丁检测这个问题背景是产品…

uview1 的u-tabs组件在微信小程序中会出现横向滚动条

uview1 的u-tabs组件在微信小程序中会出现横向滚动条&#xff0c;真机才会生效&#xff0c;微信开发者工具没问题包括官方示例也会 原因&#xff1a;未屏蔽微信小程序的滚动条 解决办法&#xff1a;uview-ui中uview-ui/components/u-tabs/u-tabs.vue文件把h5屏蔽滚动条的条件编…

基于ssm的线上课程管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本线上课程管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

mysql,树形结构表中,查询所有末节点数据(叶子结点)

需求&#xff1a;在一个可以存放多级目录的表中&#xff0c;查询出某个课程目录下所有末节点&#xff08;因为只有末节点可以挂载资源&#xff09; 例如下图&#xff1a; 其中 1.11.2.12.1 都是末节点&#xff0c;因为他们已经没有下一级了 catalog表中重要字段有&#xff1a;c…

对Spring源码的学习:基于XML文件配置的开发流程

目录 BeanFactory开发流程 ApplicationContext BeanFactory与ApplicationContext对比 基于XML方式的Bean的配置 自动装配 BeanFactory开发流程 这里的第三方指的是Spring提供的BeanFactory&#xff0c;Spring启动时会初始化BeanFactory&#xff0c;然后读取配置清单&#…

[山东大学操作系统课程设计]实验六

0.写在前面&#xff1a; 事先说明一点&#xff0c;在实验六开始&#xff0c;绝大多数的问题我应该都无法解释了&#xff0c;因为我自己做这个实验都是有点困难的&#xff0c;所以在接下来我不会过多阐述原理上的东西&#xff0c;只交待这个东西是怎么做的。 另外实验六七又是…

关于“Python”的核心知识点整理大全17

目录 ​编辑 8.3.4 结合使用函数和 while 循环 greeter.py 8.4 传递列表 greet_users.py 8.4.1 在函数中修改列表 printing_models.py 8.4.2 禁止函数修改列表 要将列表的副本传递给函数&#xff0c;可以像下面这样做&#xff1a; 往期快速传送门&#x1f446;&#x…

java SSM教师工作量管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 教师工作量管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要…

【数学建模】《实战数学建模:例题与讲解》第十二讲-因子分析、判别分析(含Matlab代码)

【数学建模】《实战数学建模&#xff1a;例题与讲解》第十二讲-因子分析、判别分析&#xff08;含Matlab代码&#xff09; 基本概念时间判别费歇判别贝叶斯判别 习题10.31. 题目要求2.解题过程3.程序4.结果 习题10.6&#xff08;1&#xff09;1. 题目要求2.解题过程——对应分析…

OLED屏幕,如何成为商显主流

OLED屏幕在商显领域的应用逐渐增加&#xff0c;成为商显主流的原因主要有以下几点&#xff1a; 显示效果优异&#xff1a;OLED屏幕具有自发光原理&#xff0c;色彩鲜艳、对比度高、视角广&#xff0c;能够提供更好的视觉体验。在商业展示、广告宣传等场景中&#xff0c;OLED屏幕…

Feign-自定义配置

目录 一、自定义Feign配置 二、修改日志级别 方式一&#xff1a;application配置文件方式 方式二&#xff1a;java代码方式 三、总结 一、自定义Feign配置 二、修改日志级别 配置Feign日志有两种方式 方式一&#xff1a;application配置文件方式 &#xff08;1&#xff09…

Java服务占用过高CPU排查思路

一、背景说明 如果线上启动的Java服务占用过高的CPU&#xff0c;我们通过top命令是可以查看到的。 那么问题来了&#xff0c;如果通过top命令查看到是因为java服务引起的占用过高的CPU时间&#xff0c;该如何进行详细的排查呢&#xff1f;换句话说就是如何定位问题发生在代码的…

Vue中使用echarts@4.x中国地图及AMap相关API的使用

一、此 demo 实现的基本功能 1.中国地图的显示 2.地图点击下钻的功能 3.地图相关组件的使用&#xff0c;例 tooltip… 二、实现思路 初始使用下载本地的中国 geo 格式的 json 数据来绘制地图&#xff0c;点击某一区划&#xff08;例&#xff1a;山东省&#xff09;时&#xff0…

PySpark大数据处理详细教程

欢迎各位数据爱好者&#xff01;今天&#xff0c;我很高兴与您分享我的最新博客&#xff0c;专注于探索 PySpark DataFrame 的强大功能。无论您是刚入门的数据分析师&#xff0c;还是寻求深入了解大数据技术的专业人士&#xff0c;这里都有丰富的知识和实用的技巧等着您。让我们…

Centos7 配置Git

随笔记录 目录 1&#xff0c; 新建用户 2. 给用户设置密码相关操作 3. 为新用户添加sudo 权限 4. 配置Git 4.1 配置Git 4.2 查看id_ras.pub 5, 登录Git 配置SSH 秘钥 6. Centos7 登录Git 7. clone 指定branch到本地 8. 将新代码复制到指定路径 9. 上传指定代码 …

2023年11月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2023年11月国产数据库大事件和重要产品发布消息。 11月国产数据库大事记 TOP10 11月国产数据库大事记&#xff08;时间线&#xff09; 11月1日消息&#xff0c;近日&#xff0c;由金仓数据库支撑的某大型运营商B域一级BOSS枢纽系统顺利升级上线。金仓数…