|
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
|
|
Динамическое программирование04.05.2011, 23:52. Показов 3218. Ответов 11
Метки нет (Все метки)
Добрый вечер. Мне задали написать задачи на динамическое программирование, но нам ничего не объясняли, поэтому обращаюсь к профессионалам. Помогите пожалуйста написать программы или объясните как с математической точки зрения решать задачи, чтобы можно было вывести рекуррентную формулу к каждой из задач.
Играют два игрока. Есть полоска шириной 1 на 2010 клеток. Первый может закрасить 2, 4 или 6 рядом стоящих клеток( в любом месте полоски), второй 3, 6 или 9. Выигрывает тот кто закрасит последний( второму не хватит места). Кто выиграет при правильной стратегии? (Опять же первый или второй и почему?) Есть плитка n на n, но в правом верхнем углу одна клетка вырезана и в левом нижнем тоже. Можно ли на неё разложить доминошки размером 1 на 2, чтобы пустых клеток не осталось и чтобы они не накладывались одна на другую? Заранее большое спасибо...
0
|
|
| 04.05.2011, 23:52 | |
|
Ответы с готовыми решениями:
11
Динамическое программирование Динамическое программирование
|
|
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
|
|
| 05.05.2011, 09:27 | |
|
Вторая задача к программированию отношения не имеет - ответ всегда "нет".
1
|
|
|
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
|
|
| 05.05.2011, 09:36 [ТС] | |
|
Спасибо за помощь, со второй задачей я с вам согласен, если думать по логике, но преподавателю такой ответ не понравится, поэтому нужно что-то написать.
0
|
|
|
Платежеспособный зверь
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
|
||
| 05.05.2011, 15:49 | ||
|
Для n- нечётного ответ сразу "нет", потому что вырезав две клетки мы всё равно оставим нечётное количество, которое нельзя покрыть доминушками. Для чётного n ответ так же будет "нет", потому что вырезаны две клетки одного цвета, значит клеток другого цвета будет на 2 больше и покрыть поле не удастся.
2
|
||
|
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
|
|
| 05.05.2011, 19:59 [ТС] | |
|
За вторую задачу большое спасибо. Хохол подсказал, что первая задача делается с помощью теоремы Шпраг-Гранди, но я не очень ее понял можно ее объяснить другим способом или задачу объяснить другим способом? Спасибо ...
0
|
|
| 05.05.2011, 20:32 | |
|
Не по теме: Ни фига она с помощью функции Шпрага-Гранди не решается (или я не знаю как), поэтому и удалил.
1
|
|
|
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
|
|
| 05.05.2011, 21:41 [ТС] | |
|
Возможно у кого еще будут идеи? Я думал на каждой итерации подсчитывать количество ячеек, остались и смотреть, если количество клеток, оставшихся кратное 3, 6 или 9, то первый игрок должен сделать так, чтобы кратность была 2, 4 или 6. Но прикол в том, что они могут закрашивать в любом месте линии ячейки, поэтому данная вариант решения не пройдет.
0
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|
| 06.05.2011, 06:12 | |
|
Для 1-ой задачи предлагаю такой вариант:
сначало для каждого игрока вручную заполняем результат от 0 до 9 включительно: Для первого игрока: 0 1 2 3 4 5 6 7 8 9 <- Если столько рядом стоящих клеточек осталось и начинает 1-ый игрок 0 0 1 1 1 1 1 1 1 1 <- если 0, то значит первый игрок проиграет, если 1- выиграет Для второго игрока: 0 1 2 3 4 5 6 7 8 9 <- Если столько рядом стоящих клеточек осталось и начинает 2-ой игрок 0 0 0 1 1 1 1 1 1 1 <- если 0, то значит второй игрок проиграет, если 1- выиграет Теперь начиная с 10 и до 2010 начинаем использовать ДП: берем 10 и рассматриваем это число для 1-го игрока так: - берем число 2. - просматриваем соответственно для второго игрока варианты: 0, 8 - здесь 2-ой игрок выиграет (учитывайте ранее полученные результаты 0 и 8 для 1-го и 2-го игрока) 1, 7 - здесь 2-ой игрок выиграет (учитывайте ранее полученные результаты 1 и 7 для 1-го и 2-го игрока) 2, 6 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 2 и 6 для 1-го и 2-го игрока) и т.д. - берем число 4. - просматриваем соответственно для второго игрока варианты: 0, 6 - здесь 2-ой игрок выиграет (учитывайте ранее полученные результаты 0 и 6 для 1-го и 2-го игрока) 1, 5 - здесь 2-ой игрок выиграет (учитывайте ранее полученные результаты 1 и 7 для 1-го и 2-го игрока) 2, 4 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 2 и 6 для 1-го и 2-го игрока) и т.д. - берем число 6. - и тоже просматриваем соответствующие для второго игрока варианты... Если хотя бы в одном из просматриваемых вариантов победа 1-го игрока, то продолжаем таблицу для 1-го игрока. После просмотра числа 10, для 1-го игрока получится: 0 1 2 3 4 5 6 7 8 9 10 0 0 1 1 1 1 1 1 1 1 1 Затем похожее делаем для 2-го игрока (для второго игрока делаем эти расчеты только для того, чтобы использовать эти значения в будущем для вычислений 1-го игрока). берем 10 и рассматриваем это число для 2-го игрока так: - берем число 3. - просматриваем соответственно для первого игрока варианты: 0, 7 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 0 и 7 для 1-го и 2-го игрока) 1, 6 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 1 и 6 для 1-го и 2-го игрока) 2, 5 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 2 и 5 для 1-го и 2-го игрока) 3, 4 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 3 и 4 для 1-го и 2-го игрока) - Здесь маленькое уточнение: если рассматриваем варианты, как сейчас для 1-го игрока, и оба варианта выигрышные для 1-го и 2-го игрока, и хотя бы один вариант больше 3, то всегда выиграет 1-ый игрок. В остальных случаях и для 1-го и 2-го игрока будет работать такое правило: если оба варианта выигрышные для 1-го и 2-го игрока, то выиграет противоположный игрок, рассматриваемому. - берем число 6. - просматриваем соответственно для первого игрока варианты: 0, 4 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 0 и 4 для 1-го и 2-го игрока) 1, 3 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 1 и 3 для 1-го и 2-го игрока) 2, 2 - здесь 1-ый игрок выиграет (учитывайте ранее полученные результаты 2 и 2 для 1-го и 2-го игрока) - берем число 9. - просматриваем соответственно для первого игрока варианты: 0, 1 - здесь 2-ой игрок выиграет (учитывайте ранее полученные результаты 0 и 1 для 1-го и 2-го игрока) Итак после просмотра числа 10, для 2-го игрока получится: 0 1 2 3 4 5 6 7 8 9 10 0 0 0 1 1 1 1 1 1 1 1 И так далее. На самом деле можно остановится рассматривать очередные варианты, для любого числа, для 1-го и 2-го игрока, если попался первый вариант в котором этот игрок выигрывает.
1
|
|
|
0 / 0 / 0
Регистрация: 06.10.2010
Сообщений: 16
|
|
| 06.05.2011, 10:21 [ТС] | |
|
Спасибо большое Вы меня реально выручили. Держите +1...
0
|
|
|
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
|
|
| 06.05.2011, 12:17 | |
|
valeriikozlov, подозрительно простой у вас пересчет. Думаю, он неверен. Почитайте про стратегию игры ним и пример из статьи про функцию шпрага-ганди. В обоих случаях для каждой подигры недостаточно одной лишь информации о том, является ли её позиция выигрышной. Думаю, тут примерно так же.
Добавлено через 2 минуты Если бы ходы игроков были одинаковыми, задача решалась бы так же как в примере про функцию ш-г, но тут ходы разные и я не понимаю что делать.
1
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
||
| 06.05.2011, 21:19 | ||
|
Хохол, Как с Вами тяжело!
![]() Шучу конечно, все наоборот. Давайте подругому рассмотрим эту задачу. Итак выигрышный алгоритм 1-го игрока: - первым ходом 1-ый игрок делает так, что бы оставались 2 клетки и все остальное (таким образом 1-ый игрок сделал только для себя запас хода). - следующими ходами, 1-ый игрок делает тоже самое, с любой из оставшихся частей. То что 1-ый игрок при таком алгоритме выиграет - это несомненно. Ведь он оставляет только для себя запас хода, а второй игрок так не может.
2
|
||
|
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
|
|
| 06.05.2011, 21:37 | |
|
Ха, прикольно, так просто решается.
Итого, первая задача с такой формулировкой тоже мало отношения к программированию имеет.
1
|
|
| 06.05.2011, 21:37 | |
|
Помогаю со студенческими работами здесь
12
задача динамическое программирование Лесенка - динамическое программирование Динамическое программирование. Кааак? Динамическое программирование - задача
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|