带有期限的作业排序要解决的是操作系统中单机、无资源约束且每个作业可在等量时间内完成的作业调度问题,形式化描述为:
①只能在一台机器上处理n个作业,每个作业i=1,...,n均可在单位时间内完成;
②每个作业i都有一个期限值di>0,(di是整数);
③当且仅当作业i在它的截止期限前被完成时获得pi>0的效益;
问题的可行解是这n个作业的一个子集合J。J中的每个作业都能在各自的截止期限之前完成,产生一个作业效益之和∑pi。具有最大效益值的可行解就是最优解。
要求用更快的作业排序算法(利用集合树方法)实现。
输入格式:
第一行为一个不超过200的正整数n,表示作业的个数;
接下来的n行,每行两个正整数(中间用空格隔开),表示每个作业i的截止期限di和按期完成产生的效益pi。
输出格式:
第一行给出最优解的效益值。
第二行按照时间片分配顺序输出最优解J中的作业,中间用空格隔开,最后一个作业后面不要加空格。
输入样例1:
4
1 20
2 15
2 100
1 10
输出样例1:
120
1 3
输入样例2:
6
2 25
3 20
3 15
2 10
4 1
4 5
输出样例2:
65
3 1 2 6
本题考查FJS算法(一种更快的作业排序算法)
首先先了解一些预备内容:
1.时间片:若还没给作业i分配处理时间,则分配给它时间片[a-1,a],其中a应该尽量取最大,且时间片应该为空;为简便起见,用i表示该时间片。
2.