|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.10.2009, 19:31 | #1 |
ACM!
Форумчанин
Регистрация: 19.06.2009
Сообщений: 382
|
Рекурсия. Задача про монеты
Ох... Я себя таким тупым чувствую, но вот очередная задача на рекурсию и снова ноль мыслей Сделал заготовку (см. ниже), по задумке Money и есть рекурсивная процедура, но вот что в ней прописывать ваще не знаю...
Вот текст задачи (если что): |У покупателя есть n монет достоинством H(1),..., H(n). У продавца есть m монет достоинством B(1),...,B(l). Может ли купить покупатель вещь стоимости S так, чтобы у продавца нашлась точная сдача (если она необходима).| Код:
|
21.10.2009, 19:37 | #2 |
Любопытная Вредина
Участник клуба
Регистрация: 19.06.2009
Сообщений: 1,285
|
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
|
21.10.2009, 19:38 | #3 |
Форумчанин
Регистрация: 10.10.2009
Сообщений: 680
|
Да уж. Опять напишу "человеческое" (без рекурсии) решение. Задача известная, есть и на многих онлайн-АСМ-системах, и на Алголисте. Фактически можно свести к тому, что у продавца есть монеты свои и покупателя и ему необходимо с них собрать сумму, равную общей сумме минус цена вещи. Есть 2 основных способа решения. Если большие ограничения на количество монет и маленькие - на их номинал, - тогда динамикой. Если маленькие на количество и большие на номинал - тогда нерекурсивным перебором. Сейчас распишу оба способа.
|
21.10.2009, 19:42 | #4 |
Форумчанин
Регистрация: 10.10.2009
Сообщений: 680
|
О, на динамическое решение уже и ссылку бросили. Тогда распишу перебор. Генерим 2ичное число из числа нолей, равного числу монет. Далее на каждом шагу будем увеличивать на 1 это число, пока не дойдем до (2^n)-1. Увеличив, составляем сумму следующим образом - если бит, соответствующий выбраной монете, равен 1, то включаем ее в сумму, иначе - нет. Если сумма равна искомой - есть ответ.
Для увеличения производительности лучше пересчитывать сумму во время самого увеличения числа на 1. |
21.10.2009, 21:15 | #5 |
ACM!
Форумчанин
Регистрация: 19.06.2009
Сообщений: 382
|
Погодите! Динамическое программирование - это не рекурсия?! Блин, а там у темы название динамическое программирование, я думал это одно и то же! Больше не буду пытаться рекурсией сделать)
|
21.10.2009, 21:52 | #6 |
Форумчанин
Регистрация: 10.10.2009
Сообщений: 680
|
Можете рекурсией, можете не рекурсией, как Вам удобно. Но если нету даже примерного представления об алгоритме решения, то рекурсия Вам не поможет.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача на языке Pascal. Рекурсия. | (FainT) | Помощь студентам | 6 | 23.05.2009 15:45 |
Рекурсия - сложная задача! | RomT24 | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 06.05.2009 23:14 |
Задача про треугольник | YO$YA | Помощь студентам | 10 | 15.11.2008 20:29 |
Монеты 10 коп | KORT | Свободное общение | 7 | 24.08.2007 18:58 |