Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2016, 16:24   #1
Евгений1415
 
Регистрация: 28.01.2016
Сообщений: 3
По умолчанию самый дешевый путь

В каждой клетке прямоугольной таблицы NM записано некоторое число. Изначально игрок находится в левой верхней клетке. За один ход ему разрешается перемещаться в соседнюю клетку либо вправо, либо вниз (влево и вверх перемещаться запрещено). При проходе через клетку с игрока берут столько килограммов еды, какое число записано в этой клетке (еду берут также за первую и последнюю клетки его пути).

Требуется найти минимальный вес еды в килограммах, отдав которую игрок может попасть в правый нижний угол.

Входные данные
Вводятся два числа N и M — размеры таблицы (1N20, 1M20). Затем идет N строк по M чисел в каждой — размеры штрафов в килограммах за прохождение через соответствующие клетки (числа от 0 до 100).

Выходные данные
Выведите минимальный вес еды в килограммах, отдав которую можно попасть в правый нижний угол.

Примеры
входные данные
5 5
1 1 1 1 1
3 100 100 100 100
1 1 1 1 1
2 2 2 2 1
1 1 1 1 1
выходные данные
11


При чем здесь PHP?
Перемещаю в помощь студентам
И укажи на каком языке

Последний раз редактировалось Аватар; 28.01.2016 в 16:29.
Евгений1415 вне форума Ответить с цитированием
Старый 28.01.2016, 17:00   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

О! Можно бектрекингом побаловаться...
p51x вне форума Ответить с цитированием
Старый 28.01.2016, 17:13   #3
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Или подобием алгоритма Дейкстры.
FPaul вне форума Ответить с цитированием
Старый 28.01.2016, 17:19   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

погуглите "динамическое программирование черепашка"

Единственное отличие, что в классической задаче идёт поиск максимума, а в данной - поиск минимума.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.01.2016, 17:34   #5
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Наверное, нужно сначала подсчитать цену перемещения строго вправо и строго вниз. А потом перейти к клетке [2,2] и из неё двигаться вправо и вниз, выбирая самую дешёвую цену из двух возможных. И так до самой последней клетки.
FPaul вне форума Ответить с цитированием
Старый 28.01.2016, 18:37   #6
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Здесь обычным волновым алгоритмом можно решить без проблем
Цитата:
выбирая самую дешёвую цену из двух возможных.
это не даст самого дешевого пути.
Croessmah вне форума Ответить с цитированием
Старый 28.01.2016, 19:24   #7
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Цитата:
это не даст самого дешевого пути.
Напомню
Цитата:
Выходные данные
Выведите минимальный вес еды в килограммах, отдав которую можно попасть в правый нижний угол.
Т.е. достаточно вычислить "цену".
А волновой здесь неприменим.
FPaul вне форума Ответить с цитированием
Старый 28.01.2016, 21:41   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

FPaul, ваш алгоритм работать не будет. исходный пример дан уже с этим "подвохом" - из угла два вариант - пойти вниз, стоимость 3 или пойти вправо, стоимость 1
Ваш алгоритм какой путь выберет?!

Ну и не понимаю, о чёт тут спорить.
Эта задача быстро и просто решается через ДП.
Она КЛАССИЧЕСКАЯ азбучная задача для ДП.
Вы хотите изобрести велосипед? А зачем?

ДП - это динамическое программирование

Последний раз редактировалось Вадим Мошев; 28.01.2016 в 21:46.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.01.2016, 21:49   #9
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Т.е. достаточно вычислить "цену".
Цену пути.
Вот пример:
0 0 0 0 0
1 1 1 1 10
1 1 1 1 0
если по Вашему алгоритму идти, то получим цену 10, а по другому пути - 2.
Цитата:
А волновой здесь неприменим.
Еще как применим, просто волну пускаем в две стороны.
Фактически, алгоритм Дейкстра.
Croessmah вне форума Ответить с цитированием
Старый 28.01.2016, 22:33   #10
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Цитата:
если по Вашему алгоритму идти, то получим цену 10, а по другому пути - 2.
Нет.
1-й проход от [1,1] вправо и вниз. В клетки матрицы записываем минимальную сумму
Код:
0 0 0 0 0
1 1 1 1 10
2 1 1 1 0
2-й проход от [2,2] вправо и вниз. В клетки матрицы записываем минимальную сумму
Код:
0 0 0 0 0
1 1 1 1 10
2 2 1 1 0
3-й проход от [3,3] вправо и вниз. В клетки матрицы записываем минимальную сумму
Код:
0 0 0 0 0
1 1 1 1 10
2 2 2 2 2
Это и есть ДП - т.к. для выбора оптимального хода используется некая предистория. И именно об этом я и говорил
Цитата:
Наверное, нужно сначала подсчитать цену перемещения строго вправо и строго вниз. А потом перейти к клетке [2,2] и из неё двигаться вправо и вниз, выбирая самую дешёвую цену из двух возможных. И так до самой последней клетки.

Последний раз редактировалось FPaul; 28.01.2016 в 22:38.
FPaul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самый дешевый путь. Графы. jocry Помощь студентам 1 14.03.2009 12:56