|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||||||||||||
Рекуррентные соотношения и динамическое программирование22.07.2016, 06:18. Показов 1767. Ответов 19
Метки нет (Все метки)
Приветствую, Форумчане!
Есть задача, которую нужно решить используя динамическое программирование. Формулировка задачи: Есть заяц, которому нужно пересечь реку, прыгая по островкам. На каждом островке находится определенное кол-во конфет, которые заяй собирает, попадая на него. Однако, заяц не может прыгнуть с островка i на островок i+1, заяц может прыгать через один остроков, т.е. c i на i+2 или через два островка, т.е. с i на i+3, как показано на рисунке ниже Нужно найти максимальное количество конфет, которое может собрать заяц, перебираясь через реку. При этом свой путь, заяц должен заканчивать на n -ом или на n-1 -ом островке, где n - количество островков. Собственно, решил составить рекуррентные соотношение и пришел вот к чему(конечно оно не верно, иначе яб не писал сейчас все это):
И начальные значения(почему именно эти значение, смотреть рисукон выше): a[0] = 11 (старт зайца) a[1] = MIN_INT(на первый остовок невозможно попасть) a[2] = 14 (a[0] + 3) Кто дошел до конца, вот код, который я написал: Кликните здесь для просмотра всего текста
data.txt(первая строчка, кол-во случаев, вторая и третья, количество конфет на островках) Кликните здесь для просмотра всего текста
Данный код работает верно в ~80% случаях. Я понимаю, почему он не работает. Могу объяснить отдельным комментарием, если понадобится. Помогите, люди добрые!
0
|
||||||||||||||||
| 22.07.2016, 06:18 | |
|
Ответы с готовыми решениями:
19
Рекуррентные соотношения
|
|
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,560
|
||||||
| 22.07.2016, 09:27 | ||||||
1
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 22.07.2016, 15:35 | ||||||
1
|
||||||
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
| 22.07.2016, 16:15 [ТС] | |
|
MansMI, Спасибо за ответ. Работает, но хотелось бы без рекурсии.
Добавлено через 4 минуты Mr.X, Спасибо за ответ. Тоже работает, но конечно с таким количеством typedef`ов... Тяжело становится читать код. Добавлено через 4 минуты Если у кого-то есть еще варианты, более простые, выкладывайте. Тема, пока, не закрыта.
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||
| 22.07.2016, 16:30 | |||
|
T_res_of_jump_and_islet_indexes удобнее было бы читать что-то вроде std::map<std::pair<int, size_t>, int> ?
0
|
|||
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||
| 22.07.2016, 16:33 [ТС] | ||||||
|
Mr.X, Ну для меня удобнее былоб читать именно в формате
0
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 22.07.2016, 16:42 | ||
|
0
|
||
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
| 22.07.2016, 19:23 [ТС] | |
|
Mr.X, Да, в чем-то вы правы.
Однако из этого T_islet_values не понятно, что это тип vector. из этого T_jump_and_islet_indexes не понятно, что это тип pair. из этого T_res_of_jump_and_islet_indexes не понятно, что это тип map<pair<>, int>. Всю эту информацию приходится держать в голове, когда начинаешь читать код, ну либо постоянно листать и смотреть typedef чего это был. Вы просто привыкли, потому что, скорее всего, постоянно заменяете подобные типы подобными именами, но для другово человека разобраться в этом не просто.
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 22.07.2016, 19:47 | ||
|
Так-то типы отражают предметную область задачи, и читателю кода как раз надо понять как они с ней связаны. Ну а то, смысл чего ты понял, само запоминается, тем более имена типов говорящие. В данной задаче ключевой тип - это тип таблицы-мэпа, ну и второй - вектора островков, остальные вспомогательные.
0
|
||
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
|
| 22.07.2016, 20:06 [ТС] | |
|
Mr.X, Ну хотяб как-то так писать: vector_islet_values, pair_jump_and_islet_indexes, map_res_of_jump_and_islet_indexes. Может не так красиво, но во всяком случае понятно, что есть что.
Еще вопрос, с чем связано такое огромное количество пробелом между типами, названиями и т.д.? Опять же ИМХО, что и это ухудшает читаемость. Весь код растянут, глаза разбегаются.
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||
| 22.07.2016, 20:24 | |||
|
У меня уже как-то выработались правила на этот счет: - если в названии множественное число, значит контейнер. - если пара типов через and, значит пара и есть. - если T_значение_of_ключ, значит мэп. Все именно для удобства.
0
|
|||
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||
| 22.07.2016, 20:28 [ТС] | ||
|
Просто, как правило, такой подход я встречаю именно у матерых ребят.
0
|
||
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||
| 23.07.2016, 04:23 [ТС] | ||||||
|
Mr.X, Кстате говоря, ваш код не правильно работает для значений:
1
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 23.07.2016, 10:37 | ||||||
|
Да, пардон, ошибочка вкралась.
Вот так правильно:
0
|
||||||
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||
| 23.07.2016, 17:02 [ТС] | ||||||
|
Mr.X, И еще, в collected_bonbons_max внешний цикл for - лишний.
Если сделать вот так, то все будет также работать, но при этом минус один цикл for и минус несколько ненужных переменных соответственно:
1
|
||||||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||||||
| 23.07.2016, 19:51 | |||||||
|
впереди себя:
0
|
|||||||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
| 23.07.2016, 19:57 | |
|
Leonman
Что-то не ясно, почему ваш алгоритм не работает. Если путь зайца лежит через определённую точку K, то он должен достигать этой точки по максимальному пути, иначе общий путь не будет максимальным. Так как прийти в эту точку он может только из двух других: K-2 и K-3, то, зная пути с максимальным весом до этих точек, мы можем найти путь с максимальным весом до K. Может есть какой-то прозрачный контр-пример?
1
|
|
|
15 / 15 / 4
Регистрация: 17.06.2012
Сообщений: 274
|
||||||||||||||||
| 24.07.2016, 00:45 [ТС] | ||||||||||||||||
|
mporro, Я почему то думал, что знаю ответ на этот вопрос, но оказалось, что нет и я решил понять, а почему все-таки не работает. И понял
![]() Условие задания гласит, что заяй должен заканчивать на n -ом или n-1 -ом оставке, а я в своей коде совершенно это не учел и return фукнции calcMaxOfCandies() выгледит вот так:
И так как условие задачи разрешает закончить на n -ом или n-1 -ом оставке, изменив
Спасибо за ваш комментарий, еслиб не он, моя программа так бы и осталась не работающей на любых input`ах.
0
|
||||||||||||||||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
| 24.07.2016, 05:59 | |
|
0
|
|
| 24.07.2016, 05:59 | |
|
Помогаю со студенческими работами здесь
20
Рекуррентные соотношения. Проверка ошибок
Вычисление суммы ряда используя рекуррентные соотношения Вычисление суммы ряда используя рекуррентные соотношения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|