高性能计算机
问题描述:
1.题目长, 我省略前面的了, 现在又一部超级计算机, 有三个工作状态A类, B类和待机, 它具有P个计算节点, 待机状态不执行计算, 并且初始状态为待机状态. 从其它状态(待机)转入A工作状态或B工作状态需要一定的启动时间. 对于不同的处理节点, 这个时间不一定相同. 用两个正整数ta[i]和tb[i](i = 1,2,3...,p)分别表示节点i转入工作状态A和工作状态B的启动时间(单位:ns).
2.一个节点连续处理同一类任务时候, 执行时间——不含状态转换的时间——随任务量(这一类子任务的数目)的平方增长, 即: t = ka[i]*x^2,类似执行B任务x个的时间是: t = kb[i]*x^2,对应的执行时间为:其中, ka[i]和kb[i]是系数, 单位是ns.
任务分配必须在所有计算开始之前完成,所谓任务分配, 即给每个计算节点设置一个任务队列, 队列由一串A类和B类子任务组成. 两类子任务可以交错排列.
计算开始后, 各计算节点分别从各自的子任务队列中顺序读取计算任务并执行, 队列中连续的同类子任务将由该计算节点一次性读出, 队列中一串连续的同类子任务不能被分成两部分执行.
现在需要你编写程序, 给这p个节点安排计算任务, 使得这个工程计算任务能够尽早完成. 假定任务安排好后不再变动,而且所有的节点都同时开始运行,任务安排的目标是使最后结束计算的节点的完成时间尽可能早.
输入:
第一行是p, 第二行na, nb, 分别表示A类和B类任务个数. 接着的p行是ta[i],tb[i], ka[i], kb[i]
表示每个计算节点的参数. (i = 1,2,3,...,p); (0<p<=20, 0<= na,nb<=60)
输出:
输出一行, 全部任务完成的最短时间.
输入例子:
5 5
3
15 10 6 4
70 100 7 2
30 70 1 6
输出例子:
93
题意: 见原文.
解题思路: (黑书解题思路, 加上自己的思考)
1. 问题有2个子问题: