Я работаю над алгоритмом планирования активности. Допустим, есть N видов деятельности. Каждое действие можно выполнить только в указанные сроки (например, с 8:00 до 17:00), и есть время, необходимое для завершения действия (например, 2 часа). Я хочу закончить как можно больше занятий за день, указав время начала и время окончания. Например.
- Мероприятие 1 (с 8 до 17) занимает 2 часа.
- Мероприятие 2 (7:00 - 11:00) длится 1,5 часа.
- Мероприятие 3 (с 11 до 15) длится 1 час.
- Мероприятие 4 (13: 00–15: 30) длится 1,5 часа.
- Мероприятие 5 (с 6 утра до 8 вечера) длится 3 часа.
- Мероприятие 6 (с 11:00 до 18:00) занимает 2 часа.
- Мероприятие 7 (14: 00–17: 00) занимает 1 час.
- Мероприятие 8 (19: 00–12: 00) занимает 1 час.
Я хочу заниматься как можно большим количеством занятий с 8 до 20 часов. Я просмотрел алгоритм жадного выбора активности, но мой случай немного отличается от этого. Любая помощь приветствуется!
Я пробовал эту логику:
Activity[] possibleActivities; // this has all the activities, Activity object has startTime, endTime and duration.
int dayStartTime= 8; //8am
int dayEndTime= 18; //6pm
Arrays.sort(possibleActivities); // sort the activities based on the startTime
int hours=dayStartTime;
List<Activity> dailyActitiy=new ArrayList<>();
for(Activity activity: possibleActivities){
if(activity.startTime<=hours && hours<dayEndTime){
dailyActitiy.add(activity);
hours+=dailyActitiy.duration;
}
}
return dailyActitiy;