给定一台有m个储存空间的单进程机器;
现有n个 请求:第i个请求计算时需要占用R[i]个空间,计算完成后,储存计算结果需要占用O[i]个空间(其中O[i]<R[i])。问如何安排
这n个请求的顺序,使得所有请求都能完成。
如:m=14,n=2,R[1,2]=[10,8],O[1,2]=[5,6]。可以先运行第一个任务,计算时占用10个空间,计算完成后占用5个空间,剩余9个空间执行第二个任务;但如果先运行第 二个任务,则计算完成后仅剩余8个空间,第一个任务的 计算空间就不够了。
从题意,我们可以分析出,第k个元素的运算空间 + 前k个元素的所用储存空间越小越好
我们考察两种情况,
O1 + O2 + O3…. +Oj … + Ok-1 + Rk (1)
O1 + O2 + O3…. +Ok … + OR-1 + Rj (2)
假设(1)是小的那个。 那么一定有Oj + Rk <= Ok + Rj。 从而 Rk – Ok <= Rj – Oj
得出结论,Rj – Oj大,所以j任务要先于k任务被处理。
因此,所有任务根据相应的 R – O 降序排序,就是任务处理的先后顺序
总结套路:题目比较简单,但总结也是有点东西的 。我们想知道全局的任务最佳排序方案,先定位到两个任务,看这两个任务先后顺序怎么拍更有利于全局,再把这种规则推广至全局。