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