![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
MARSHALL MATHERS |
![]() ![]()
Сообщение
#1
|
Гость ![]() |
На рисунке изображен треугольник(я напишу треугольник как он дан в массиве):
|7 | |38 | |810 | |2744 | |45265| (типа того, палочками обочначены границы конкретно этого треугольника) Написать прогу, которая вычисляет наибольшую сумму чисел, расположенных на пути, начинающимся в верхней точке треугольника и заканчивющиймся на основании треугольника. Каждый шаг на пути может осуществлятся вниз по диогонали влево или по диогонали вправо. Число строк в треуголнике >1 и <=100. Треугольник составлен из целых чисел от 0 до 99...(это оригинальый текст задачи) надаюсь на ваши советы?! |
![]() ![]() |
Atos |
![]()
Сообщение
#2
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Задача на динамическое программирование. Алгоритм решения такой: пусть у нас n строк. Определим для каждого элемента каждой строки его вес таким образом, чтобы вес первого элемента первой строки был равен нужному нам результату.
Шаг 0. Всем элементам n-й строки определим вес, равный их значению. Присвоим i:=n-1 Шаг 1. Рассмотрим i-ю строку. Предположим, что мы уже знаем часть искомого пути, протягивающуюся от первой строки до i-й, и знаем некоторое j-е число в i-й строке, которое принадлежит пути. Тогда для него надо определить, куда путь пойдёт дальше- вправо вниз или влево вниз. Поэтому определим вес j-го элемента как сумму его значения и максимального из весов элементов( i+1)-й строки, лежащих по диагонали влево и по диагонали вправо. Но так как мы на самом деле ещё не знаем пути. то эту операцию повторяем для всех чисел i-й строки (т. е. j меняется от 1 до i). Шаг 2. Если i>1, то уменьшаем i на единицу и возвращаемся к шагу 1, иначе КОНЕЦ РАБОТЫ Надеюсь, понятно рассказал... Если, что, переспроси. |
Altair |
![]()
Сообщение
#3
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Задача на динамическое программирование Не согласен! можно и графами обойтись. На вскидку - кажется можно решить задачу используя Флойда, заменив там знак для поиска максимального веса для пути. Только граф из треугольника получи и все. Получишь сложность алгоримта O(n^3). -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Marshall Mathers |
![]()
Сообщение
#4
|
Гость ![]() |
Можно попроще для ученика 9 класса...
Я вообще сначала думал просто по диогоналям вправо влево, сделал, мне сказали не правильно. Надо искать путь к наибольшему числу |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата(Marshall Mathers @ 16.04.05 13:16) Можно попроще для ученика 9 класса... "Вам шашечки или ехать?" (С)Цитата По диагоналям вправо-влево это очень даже НЕпросто, потому как можно сначала право, потом влево, а можно 2 раза влево, а потом вправо. Представляешь себе полный перебор при числе строк = 100? Так что придется смотреть в сторону графов... |
Atos |
![]()
Сообщение
#6
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Цитата(Oleg_Z @ 16.04.05 5:17) Не согласен! можно и графами обойтись. На вскидку - кажется можно решить задачу используя Флойда, заменив там знак для поиска максимального веса для пути. Только граф из треугольника получи и все. Получишь сложность алгоримта O(n^3). А у приведённого алгоритма O(n^2), каждая вершина рассматривается только один раз. Разве можно проще сделать? |
xds |
![]()
Сообщение
#7
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Флейм с намёком: задача на квадрат, куб, параллелепипед, массивы, процедуры, функции... ;)
"Треугольник из чисел"! Добавлено: Динамическое программирование - метод оптимизации перебора. Граф - структура данных. ;) xds, а кнопку "Правка" что, отменили? Сообщение отредактировано: volvo - 18.04.2005 16:02 -------------------- The idiots are winning.
|
Marshall Mathers |
![]()
Сообщение
#8
|
Гость ![]() |
Пожалйста подскажите, сделайте реальную подсказку, я даже не могу представить как тут делать...
![]() ![]() ![]() |
Altair |
![]()
Сообщение
#9
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
а что были даны фантастические?
![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
MARSHALL MATHERS |
![]()
Сообщение
#10
|
Гость ![]() |
Блин мне всего 15 лет, из тех слов которые вы тут написали мне ничего не понятно...Использовать то...это. Я "то" и "это" не знаю...
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Ну так используй то, что знаешь. Я-то как могу догадаться, что тебе известно, а что нет? Телепатия?
|
Atos |
![]()
Сообщение
#12
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
MARSHALL MATHERS, так всё-таки какое именно место в моём объяснении непонятно?
Вот пример: дан треугольник 3 6.....2 1.....4.....9 Каждому элементу должен быть присвоен некоторый вес. Пока он неизвестен. 3,? 6,?......2,? 1,?......4,?......9,? Шаг 0. 3,? 6,?.......2,? 1,1.......4,4......9,9 У нас три строчки. Рассматриваем (3-1)=вторую строчку. Шаг 1. Смотрим на число 6. Влево вниз отнего - элемент с весом 1, вправо вниз - элемент с весом 4. Выбираем максимум. Это 4 . Складываем 4 и 6. Получившееся делаем весом рассматриваемого элемента. 3,? 6,10.......2,? 1,1........4,4........9,9 Теперь аналогичным образом рассматриваем второй элемент второй строй - это число 2. Выбираем максимум из 4 и 9 и складываем с двойкой. Получается вес 11. 3,? 6,10........2,11 1,1........4,4.......9,9 Элементы второй строки закончились. Переходим на шаг 2. Шаг 2. Переходим на строчку выше. (Рассматриваем 2-1=первую строку).Возвращаемся к шагу 1. Шаг 1. Смотрим на число 3. Выбираем максимум из 10 и 11, скаладываем. 3,14 6,10........2,11 1,1........4,4........9,9 Элементов в строке больше нет Шаг 2. Строчек выше уже нет. Конец работы. Вес самого верхнего элемента=14, и есть максимальная длина пути. Теперь понятнее? ![]() Сообщение отредактировано: Atos - 19.04.2005 6:48 |
MARSHALL MATHERS |
![]()
Сообщение
#13
|
Гость ![]() |
Нашел я решение в интернете, задача 1994 или 1991 года
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 13:04 |