Задача о ранце

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Стюш
Сообщения: 2
Зарегистрирован: 17 окт 2013, 17:12

Всем привет!помогите кодом,решить задачу о ранце используя жадный алгоритм :(
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Во-первых, давай полное описание задачи. Во-вторых, выкладывай свои попытки написать код. Помогите подразумевает совет, а не полное написание.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Суть задачи о ранце (о рюкзаке) такова: есть некая ёмкость (назовём её контейнер), которая имеет ограничение по объёму (или по весу) и есть избыточное количество предметов, которыми нужно заполнить этот контейнер. Заполнить его нужно так, чтобы в контейнере не оставалось пустого пространства или объём его был минимальным. При этом каждый предмет имеет свою ценность, поэтому общая стоимость содержимого контейнера должна быть наибольшей.
Здесь можно сразу рассмотреть два частных случая:
1. когда объём каждого предмета одинаков — в этом случае выбираются предметы с наибольшей стоимостью.
2. когда стоимость предметов одинакова — тогда выбираются предметы с наименьшим объёмом.
В остальных случаях нужно вычислять удельную стоимость единицы объёма каждого предмета и выбирать в первую очередь предметы с наибольшим отношением цена/объём, а дальше уже нужно смотреть на заполняемость контейнера. Т.е. подобрать такой набор предметов, чтобы ими максимально заполнить контейнер и добиться максимальной стоимости содержимого.

Так что для начала можно самостоятельно выполнить решение хотя бы для двух частных случаев. Об остальном уже можно будет сообща подумать.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Похоже на упрощёную задачу линейного программирования с целевой функцией Sum (x*C), определяющей максимальную ценность (где С - ценность каждого предмета), одним ограничением на вес Sum (x*M) <= M, и вырожденными ограничениями типа 0 <= x <= A на количество предметов.

Решать можно любым методом линейного программирования. Таковых в интернете масса.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить