问题描述和要求
具有截止时间和误时惩罚的任务安排问题可描述如下:
(1)给定 n 个任务的集合 S={1,2,…,n};
(2)完成任务 i 需要 ti时间,1≤i≤n;
(3)任务 i 的截止时间 di,1≤i≤n,即要求任务 i 在时间 di之前结束;
(4)任务 i 的误时惩罚 wi,1≤i≤n,即任务 i 未在时间 di之前结束将招致 wi 的惩罚;若按时完成则无惩罚。
算法设计:设计一个贪心选择思想与动态规划思想相结合的算法,解决以上任务 安排问题,确定 S 的一个最优时间表,使得总误时惩罚达到最小。
数据输入:首先输入一个正整数 n 表示任务的个数。接下来的 n 行中,每行输入 三个整数,分别代表相应任务需要的时间 ti,截止时间 di,以及误时惩罚 wi。
结果输出:输出任务安排结果以及总的误时惩罚。
测试样例
测试样例1:
测试样例2:
测试样例3:
测试样例4:
测试样例5:
具体代码
import java.util.Arrays;
public class arrange {
public static void main(String args[]){
int [][]task1 = {
{
1,4,70,1},{
2,2,60,2},{
1,4,50,3},{
1,3,40,4},{
1,1,30,5},{
1,4,20,6},{
3,6,80,7}};//四个数依次为:花费时间、时间期限、惩罚、任务编号
int [][]task2 = {
{
1,4,70,1},{
2,2,60,2},{
1,4,50,3},{
1,6,40,4},{
1,1,30,5},{
1,4,20,6},{
3,5,20,7}};
int [][]task3 = {
{
2,5,100,1},{
3,4,70,2},{
1,