嗯...一个看着简单越写越想撞墙的题...20分弃坑...这里写的只是做题时候的思路,欢迎指正。

===========================原题==========================

问题描述
有若干个任务需要在一台机器上运行。它们之间没有依赖关系,因此 可以被按照任意顺序执行。
  该机器有两个 CPU 和一个 GPU。对于每个任务,你可以为它分配不 同的硬件资源:
  1. 在单个 CPU 上运行。
  2. 在两个 CPU 上同时运行。
  3. 在单个 CPU 和 GPU 上同时运行。
  4. 在两个 CPU 和 GPU 上同时运行。
  一个任务开始执行以后,将会独占它所用到的所有硬件资源,不得中 断,直到执行结束为止。第 i 个任务用单个 CPU,两个 CPU,单个 CPU 加 GPU,两个 CPU 加 GPU 运行所消耗的时间分别为 ai,bi,ci 和 di
  现在需要你计算出至少需要花多少时间可以把所有给定的任务完成。
输入格式
输入的第一行只有一个正整数 n(1 ≤ n ≤ 40), 是总共需要执行的任 务个数。
  接下来的 n 行每行有四个正整数 ai, bi, ci, di(ai, bi, ci, di 均不超过 10), 以空格隔开。
输出格式
输出只有一个整数,即完成给定的所有任务所需的最少时间。
样例输入
3
4 4 2 2
7 4 7 4
3 3 3 3
样例输出
7
样例说明
有很多种调度方案可以在 7 个时间单位里完成给定的三个任务,以下是其中的一种方案:
  同时运行第一个任务(单 CPU 加上 GPU)和第三个任务(单 CPU), 它们分别在时刻 2 和时刻 3 完成。在时刻 3 开始双 CPU 运行任务 2,在 时刻 7 完成。

===========================思路==========================

首先读完题发现的第一点:

【加上GPU未必会加快速度,双CPU也不见得会显著提高效率。】

其次想到的就是双CPU时是否使用GPU完全没关系...毕竟两个CPU都是你的了...

为了方便我们约定一下符号缩写:

1 单CPU处理SCSingle CPU

2 双CPU处理DCDouble CPU

3 单CPU带GPUSCGSingle CPU and GPU

4 双CPU带GPUDCGDouble CPU and GPU

5 不做任何处理PASS

关于每一时刻可能有的状态及决策:

1、单CPU空闲,GPU占用:①SC②PASS

2、单CPU空闲,GPU空闲 :①SC②SCG③PASS

3、双CPU空闲:①SCG+SC②SC+SCG③SC+SC④DC(G)

4、双CPU占用:①PASS

关于SCG+SC ≠ SC+SCG 的情况举个例子就是

假如按某个规则取出的两个任务:

SCSCG

A108 SC(A)+SCG(B) = 11

B41 SCG(A)+SC(B) = 12

虽然和去出任务的条件有关,但...缺的就是很好的取出条件

第一次...决定用模拟+贪心

然后就是痛苦的挣扎= =、到底该如何决策双CPU空闲的时候用SC(G)+SC还是DC???

刚开始把DC情况分成了以下两种:

很明显只有在max(SC1, SC2) < DC1 + DC2 的时候应该使用DC,但考虑到后来的任务SC填补上缺口之后结果可能会出现变化,所以只有在当前判定的集合是余下全集的时候比较好用。

后来按照(2 * DC > SCG)的标准尝试判定了一下发现也可以举出特别多反例,于是放弃。

模拟思路的最后挣扎是根据分类排了一个优先顺序:

① DC集:按SCG与DC差值降序排列

② SCG集:按SC与SCG差值降序排列

③ SC集:按SC值升序排列

想起来之前的最小代价归并问题,想要打个flag之后从三个集合里按顺序取符合条件的,勤勤恳恳写了一大圈最后竟然写成了一个剪枝的思路,判别DC的方法还是没找到。(期间也尝试了最后一个任务再判断是否DC,跑得更远)

之后就是第二个坑:深搜+剪枝,主要思路就是尝试了上面所有可能...

剪枝的地方: ① 时间已到达目前最小完成时间 - 返回

② 给定任务尝试顺序

③ 设定工作上限

④ 判断是否等待以尝试DC情况

⑤ 合并 SCG与SC混合情况(对比,不再分叉)

⑥ 有限度的尝试SC+SC情况

⑦ 两个CPU同时工作时直接跳转

... ...

写题用的时间太长,改到最后代码都乱了,超时的问题倒是解决了,又不知道哪里出错了。可能本来的思路就有漏洞或者直接跑歪了,找遍全世界也没个答案(连官方都没标程醉了...)。剪枝肯定还有能剪的地方,目前来看贪心也贪的不够,代码就不贴了,有大神路过跪求AC代码...

CCF201403-5 任务调度相关推荐

  1. Java基于Quartz的定时任务调度服务(一)

    Quartz的基本用法 一 Quartz的简单介绍 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现,一个优秀的开源调度框架,其特点是:强大的 ...

  2. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...

    高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...

  3. java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri 引言 HelloGitHub 推出的<讲解开源项目>[1]系列. 项目地址: https://githu ...

  4. 项目ITP(五) spring4.0 整合 Quartz 实现任务调度

    2014-05-16 22:51 by Jeff Li 前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用. 然后须要的是 上课前20分钟 .幸好在帮带我的学长做 p2p ...

  5. 几种任务调度的 Java 实现方法与比较

    综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...

  6. 分布式定时任务调度系统技术选型

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:EFbiz blog.csdn.net/guyue35/ar ...

  7. Spring集成任务调度功能

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:静默虚空 https://github.com/dunwu/ ...

  8. 分布式任务调度系统V1

    分布式任务调度系统V1目标 初步目标实现,实现任务的下发分配,分布式任务执行,支持任务分片(在代码上支持),任务执行记录. 任务调度系统构思 基于C/S架构实现,基于长连接来管理实现,当前版本的逻辑架 ...

  9. 深入分析Spark任务调度的原理--Java后端同学入门Spark编程系列

    作者:陌北有棵树,Java人,架构师社区合伙人! 之前写了一篇:<我作为Java后端,分享一下入门Spark编程的经历!> 上篇是Spark入门的第一篇,写了一些关于Spark编程中RDD ...

  10. python分布式任务调度_Python使用Celery分布式异步队列/任务调度(基于Redis) - pytorch中文网...

    今天使用爬虫有些耗时较长,需要使用任务调度,Celery是Python开发的分布式任务调度模块,Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,Celery支持的消息服务有Rabb ...

最新文章

  1. 自动化系导航与控制研究所
  2. 【错误记录】Flutter 报错 ( Android Studio 中 main.dart 左侧不显示设备栏 )
  3. 【代码笔记】iOS-浮动的云
  4. django常用的模型字段类型和常用的查询
  5. 使用基本身份验证来保护Spring Boot REST API
  6. rest api 示例2_REST API教程– REST Client,REST Service和API调用通过代码示例进行了解释
  7. java 异常对象_在java中的异常处理中的异常对象是什么
  8. Vue.js 牛刀小试(持续更新~~~)
  9. 自学python怎么转行_没有基础的想转行学习Python怎么学
  10. java画笔覆盖在界面_Java画笔的简单实用方法
  11. 【10天基于STM32F401RET6智能锁项目实战第2天】(分别用库函数和寄存器点灯)
  12. amesim子模型_Amesim液压管道子模型(一):子模型的区别
  13. 高斯核与高斯核的卷积的结果还是一个高斯核的推导
  14. 常见条形码的用法和格式
  15. Flask开发实现在线问答系统首页功能
  16. AMD显卡更新UEFI GOP
  17. 解决_使用大白菜软件安装纯净版win有预装软件的问题
  18. JAVA核心:I/O(输入/输出)
  19. C1认证学习三(数据校验)
  20. 计算机管理恢复分区,如何在Windows中擦除恢复分区 | MOS86

热门文章

  1. CHIL-SQL-SELECT 语句
  2. 力扣算法学习计划打卡:第三天
  3. 颜色类中英文词汇大全(4)
  4. 计算机机房接地方案,机房防雷接地系统设计方案.doc
  5. 排列组合解决方格走法_方方格子的便利:拆分数据到多行
  6. Web安全常见漏洞原理、危害及其修复建议
  7. VS2015调试dump文件时提示未找到xxx.exe或xxx.dll
  8. linux命令获取进程pid_如何使用命令获取Linux进程的PID?
  9. 重来之大学版|卸负篇——破除光环效应,学长学姐、教授老师真的有这么厉害吗?
  10. 景安mysql主机_景安国内虚拟主机空间如何创建数据库