java如何实现下面算法

某日,一个项目经理接受到客户需求,经过讨论将其分解为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的开始时间相等

紫衣仙女
浏览 678回答 1
1回答

莫回无

// 大概看了一下, 发现所需人力没说明什么用,在本题中处于什么条件// 只说思路 要去买饭, 懒得写code&nbsp;// 1. 定义一个Task 属性 开始时间 结束时间 人力&nbsp;// 2. 将5个任务放到一个集合中 tasks = List<Task>&nbsp;// 3. 循环输出,第一次拿Task1的endTime与下一个Task的startTime比较,如果小则count计数+1// 并将Task1的endTime = (下一个Task的endTime)// 这写一下吧Date endTime = null;int count = 0;&nbsp;&nbsp;for(Task task: tasks){ // 第一种情况第一个任务他参与, 第二种情况他从第二个任务参与&nbsp; &nbsp; endTime&nbsp; = task.EndTime;&nbsp; &nbsp; for(Task task: tasks){&nbsp; &nbsp; &nbsp; &nbsp; if(endTime<task.StartTime){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endTime = task.EndTime;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}count即为最大任务数;&nbsp;// 可能有更优方式, 懒得想了;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java