Страницы

Поиск по вопросам

четверг, 1 ноября 2018 г.

Вычисление максимального количества людей в лифте

Дано список людей с именем и весом, максимальный вес который выдержит лифт. Вычислить максимальное количество людей, которое может поместиться в лифт и вывести их список.
Не понимаю, как определить комбинацию людей которые могут быть. Ведь может быть разные комбинации, 1, 2, 3 или 1, 2, 4, или 1, 3, 5, 6 Хочу сначала узнать все возможные комбинации вместимых людей и потом выводить максимальное. Но как узнать комбинации этих людей или как по другому решаются такие задачи
public class MaxLift { public static void main(String[] args) {
Man[] men = new Man[10]; men[0] = new Man("0", 110); men[1] = new Man("1", 30); men[2] = new Man("2", 34); men[3] = new Man("3", 67); men[4] = new Man("4", 33); men[5] = new Man("5", 65); men[6] = new Man("6", 19); men[7] = new Man("7", 80); men[8] = new Man("8", 98); men[9] = new Man("9", 45); int liftMaxWeight = 200;
TreeSet> set = new TreeSet<>();//add comparator for (int i = 0; i < men.length; i++) { List list = new ArrayList<>(); list.add() }
//sout }
private static class Man { String name; int weight;
public Man(String name, int weight) { this.name = name; this.weight = weight; } }
}


Ответ

Так как в задании ничего не сказано про объём лифта, то решением является следующее.
Сортируем список людей начиная с самого малого веса, например:
20 25 27 30 40 50 60 75
И складываем подряд начиная с начала пока не получим максимальную массу.
Очевидно что максимальное количество людей меньше заданного веса это люди с минимальным весом, так как если заменить одного из этого минимального набора на другого человека вес прибавится.
Сложность алгоритма равна сложности сортировки. Но при желании можно ещё ускорить не сортируя весь массив сразу, а сортируя только начало. Но это будет посложнее организовать, так как придётся алгоритм сортировки писать вручную.

Комментариев нет:

Отправить комментарий