某日,一个项目经理接受到客户需求,经过讨论将其分解为5个任务,由于任务依赖关系和人员调度问题,每个任务的开始结束时间以及所需人力可能存在差异。具体如下:任务A:开始时间为:8月1日,结束时间为:8月5日,所需人力:5人日任务B:开始时间为:8月2日,结束时间为:8月4日,所需人力:2人日任务C:开始时间为:8月4日,结束时间为:8月6日,所需人力:2人日任务D:开始时间为:8月5日,结束时间为:8月8日,所需人力:3人日任务E:开始时间为:8月9日,结束时间为:8月10日,所需人力:1人日该项目经理现在给一个技术骨干安排任务,要求其在8月1日到8月10日间,完成尽可能多的任务,编写一个Java程序根据任务的开始结束时间,所需人力,求出指定时长内能够完成的最大任务数。要求和限制:1. 任务之间不能重叠2. 一个任务的结束时间不能和另一个任务的开始时间相等,比如任务B的结束时间和任务C的开始时间相等
1 回答
莫回无
TA贡献1865条经验 获得超7个赞
// 大概看了一下, 发现所需人力没说明什么用,在本题中处于什么条件
// 只说思路 要去买饭, 懒得写code
// 1. 定义一个Task 属性 开始时间 结束时间 人力
// 2. 将5个任务放到一个集合中 tasks = List<Task>
// 3. 循环输出,第一次拿Task1的endTime与下一个Task的startTime比较,如果小则count计数+1
// 并将Task1的endTime = (下一个Task的endTime)
// 这写一下吧
Date endTime = null;
int count = 0;
for(Task task: tasks){ // 第一种情况第一个任务他参与, 第二种情况他从第二个任务参与
endTime = task.EndTime;
for(Task task: tasks){
if(endTime<task.StartTime){
count++;
endTime = task.EndTime;
}
}
}
count即为最大任务数;
// 可能有更优方式, 懒得想了;
添加回答
举报
0/150
提交
取消