【动态规划】独立任务最优调度问题

news2024/9/21 22:49:28

1.题目描述

在这里插入图片描述

2.算法思路

我认为做动态规划题的关键是找到一个合适的dp数组,确定它dp[i][j]的含义,用它和题目的最优子结构性质结合求解。具体思路如下:

(笔记些许潦草hhh…)

在这里插入图片描述

1.dp[i][j]表示第i个作业在第j(0-A,1-B)台机器上处理,两台机器处理完i个作业的最短总时间

2.根据最优子结构性质

貌似

dp[i][0]=min(dp[i-1][0],dp[i-1][1])+a[i]

dp[i][1]=min(dp[i-1][0],dp[i-1][1])+b[i]

陷阱在这里,前面选择的不同会直接影响A、B机器的可用时刻,因此,直接用上面的式子是不对的

我们还需要两个变量A、B记录处理完前i-1个作业后机器A和机器B的可用时刻

当dp[i-1][0]<dp[i-1][1]时,说明第i-1个作业在A机器完成,更新A,dp[i][0]=A+a[i],dp[i][1]=B+b[i]

否则说明第i-1个作业在B机器完成,更新B,dp[i][0]=A+a[i],dp[i][1]=B+b[i]

3.程序代码

为了简介显示主要算法,计时函数没有写在下面的代码里

#include<bits/stdc++.h>
using namespace std;
#define N 10010 
int n;
int a[N],b[N];
int dp[N][2]; //dp[i][j]:第i个作业在第j台机器上处理,两台机器处理完i个作业的最短总时间 
int main(){
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);	
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n;i++) scanf("%d",&b[i]);
	//memset(dp,0x3f,sizeof(dp));
	int A=0,B=0; //用于记录A、B两台机器的可用时刻
	dp[1][0]=a[1];
	dp[1][1]=b[1]; 
	for(int i=2;i<=n;i++){
		//第i-1个作业在处理机A完成的总时间最短 
		if(dp[i-1][0]<=dp[i-1][1]){
			A=dp[i-1][0];
			dp[i][0]=A+a[i];
			dp[i][1]=B+b[i];
		}
		//第i-1个作业在处理机B完成的总时间最短 
		else{
			B=dp[i-1][1];
			dp[i][0]=A+a[i];
			dp[i][1]=B+b[i];
		} 
	}
	if(dp[n][0]<=dp[n][1]) A=dp[n][0];
	else B=dp[n][1];
	printf("%d",max(A,B));
	fclose(stdin);
	fclose(stdout);
	return 0;
} 

在这里插入图片描述

4.生成测试数据

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(){
	int n;
	scanf("%d",&n);
	freopen("input.txt","w",stdout);
	srand(time(0));
	for(int i=0;i<n;i++) {
		if((rand()%10)==0){
			i--;
		}
		else printf("%d ",rand()%10);
	}
	printf("\n");
	for(int i=0;i<n;i++) {
		if((rand()%10)==0){
			i--;
		}
		else printf("%d ",rand()%10);
	}
	fclose(stdout);
}

5.不同规模数据实验的时间对比

计时方式:

#include<windows.h>	
	...
LARGE_INTEGER nFreq,nBegin,nEnd;
QueryPerformanceFrequency(&nFreq);	
QueryPerformanceCounter(&nBegin);
...//需要计算运行时间的关键代码
QueryPerformanceCounter(&nEnd);
double t=(double)(nEnd.QuadPart-nBegin.QuadPart)/(double)nFreq.QuadPart; //得到运行时间t
printf("运行时间:%lf",t);
数据规模n101000100000
运行时间/s0.0007080.0022770.094936

6.时间复杂度分析

都是单层循环

故为O(n)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Keil setting issue

1, data type default issue caused enter “hard fault during debug” void HardFault_Handler(void) { /* if Hard Fault exception occurs, go to infinite loop */ if(CoreDebug->DHCSR & 1) {//check c DEBUGEN 1 -> Debugger connected __breakpoint(0); //…

小迪-day12(SQL注入简要概述)

1、相关sql函数、语句 1.1 count() 1.1.1 count(column_name) ​ count(column_name)是计算数据库表中指定列有多少行&#xff0c; ​ 例&#xff1a; SELECT COUNT(column_name) FROM table_name1.1.2 count(*) 可以计算表中有多少行&#xff08;有多少条数据&#xff0…

基于 docker 搭建 grafana+prometheus 监控资源之mysql+docker+alertmanager配置(二)(超详细版)

先去看第一篇&#xff08;基础部署篇&#xff09;&#xff0c;看完后&#xff0c;才能接上本篇。 基于 docker 搭建 grafanaprometheus 监控资源之mysqldockeralertmanager配置&#xff08;二&#xff09;环境信息服务基本信息一、安装Mysqld_exporter1.1 标准启动1.2 docker-c…

1554_AURIX_TC275_时钟监控功能以及时钟紧急行为

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这部分还是前面CCU寄存器的一些延续&#xff0c;寄存器支持模块的禁用、禁用状态的查询以及是否支持休眠的控制。 1. 时钟监控是时钟进行安全设计需要考虑的一个手段&#xff0c;支持两种锁…

历史性突破,200层以上存储芯片率先量产,领先国外芯片巨头

近日&#xff0c;中企芯片技术迎来历史性突破&#xff0c;200层以上存储芯片率先量产&#xff0c;领先国外存储芯片巨头&#xff0c;或将成为全球行业领导者。后起之秀&#xff0c;鱼跃龙门 众所周知&#xff0c;存储芯片的生产&#xff0c;不仅需要高端技术&#xff0c;还需要…

MySQL之MVCC

多版本并发控制MVCC&#xff0c;也就是Copy on Write思想。MVCC除了支持读和读并行&#xff0c;还支持读和写并行、写和读并行&#xff0c;但为了保持数据一致性&#xff0c;写和写是无法并行的。 ​ 如下图&#xff0c;在事务1写的时候会copy一个记录的副本&#xff0c;其他事…

编译器做了这么多,你知道吗?

编译器做了什么 从最直观的角度来讲&#xff0c;编译器就是将高级语言翻译成机器语言的一个工具。比如我们用C/C语言写的一个程序可以使用编译器将其翻译成机器可以执行的指令及数据。我们前面也提到了&#xff0c;使用机器指令或汇编语言编写程序是十分费事及乏味的事情&…

LabVIEW编程LabVIEW开发ITECH IT6000D系列电源例程与相关资料

LabVIEW编程LabVIEW开发ITECH IT6000D系列电源例程与相关资料 ​IT6000D系列大功率可编程直流电源可支持多种规格的输出能力&#xff0c;以满足高电流、低电压或高电压、低电流等多种测试需求。同时&#xff0c;相同型号的整机间可并联工作&#xff0c;以实现更强大的输出能力…

settings.py配置文件(详解)

文章目录settings.py配置文件1. settings.py文件介绍1) BASE_DIR2) SECRET_KEY3) DEBUG4) ALLOWED_HOSTS5) INSTALLED_APPS6) MIDDLEWARE7) ROOT_URLCONF8) TEMPLATES9) WSGI_APPLICATION10) DATABASES11) AUTH_PASSWORD_VALIDATORS12) LANGUAGE_CODE和TIME_ZONE13) USE_118N和…

Cy7 Tyramide,Tyramide-Cy7,花青素Cy7 酪酰胺,Cy7酪胺

●外观以及性质&#xff1a; Cy7酪胺含有明亮的Cy7&#xff0c;可以使用标准的Cy7滤波片组轻松检测到。酪胺信号放大&#xff08;TSA&#xff09;是一种特别通用且功能强大的酶扩增技术&#xff0c;具有更高的检测灵敏度。西安凯新生物科技有限公司​为了实现大IHC检测&#xf…

排序算法总结

排序算法 排序算法可以分为内部排序和外部排序 内部排序是数据记录在内存中进行排序 外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。常见的内部排序算法有&#xff1a;插入排序、希尔排序、选择排序、冒泡排序、归并…

Qt-OpenCV学习笔记--人脸识别

前言 本人从事机械设计12年&#xff0c;业余时间自学编程。 2022年4月6日&#xff0c;开始学习C#&#xff0c; 2022年9月7日&#xff0c;开始学习c和Qt&#xff0c; 2022年10月28日&#xff0c;开始学习OpenCV&#xff0c; 今天终于搞定了传说中的 人脸识别 &#xff0c;在…

spirngcloud的基本介绍与服务注册

1. 应用系统架构的演变 单应用架构 -> 应用服务器和数据库服务器分离 -> 应用服务器集群 -> 数据库压力变大&#xff0c;数据库读写分离 -> 引入缓存机制缓解数据库的压力 -> 数据库的水平/垂直拆分(数据库分库分表) -> 应用的拆分&#xff08;微服务&…

[附源码]计算机毕业设计绿色生活交流社区网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

GitLab搭建

以docker方式运行gitlab docker run --detach \--hostname gitlab.mczaiyun.top \--publish 8443:443 --publish 8090:80 --publish 8022:22 \--name gitlab \--restart always \--volume /root/gitlab/config:/etc/gitlab \--volume /root/gitlab/logs:/var/log/gitlab \--vo…

Elasticsearch入门(二)基本操作(索引、文档、映射)

数据格式 Elasticsearch 是面向文档型数据库&#xff0c;一条数据在这里就是一个文档。为了方便大家理解&#xff0c;我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比ES 里的 Index 可以看做一个库&#xff0c;而 Types 相当于表&#x…

【在Vue脚手架项目中使用qs框架】

目录 1. 安装qs框架 2. 在main.js中添加配置 1. 安装qs框架 在前端项目中&#xff0c;可以使用qs框架&#xff0c;实现“将对象转换为FormData格式的数据”。 首先&#xff0c;安装此框架&#xff1a; 如果没有权限进入C盘找到cmd的执行软件&#xff0c;用管理员启动&…

练习题(12-06)

目录 1.最小数 2.数天数 3.非常特殊的数 4.最大值路径 5.拆分质数 6.文件拷贝 7.除去重复单词 8.变成回文字符串 1.最小数 题目描述 请找到一个大于2022的最小数&#xff0c;这个最小的数转换成二进制后&#xff0c;最低的6个二进制全为0. 思路&#xff1a;枚举即…

[附源码]Python计算机毕业设计Django物业管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Java开发:反射机制

一、Java Reflection Reflection&#xff08;反射&#xff09;是java被视为动态语言的关键&#xff08;Java是静态语言&#xff0c;因为有了反射所以又被成为“准动态语言”&#xff09; 二、重点&#xff1a;一个类只有一个Class对象 三、反射的优缺点 优点&#xff1a;可…