arts 09.12.2010 10:03 nedobook

Есть прямоугольное поле, на ячейках которого лежат монеты (количество
задано целым числом). Есть фишка, которая двигается из левого нижнего угла в
правый верхний, за один ход перемещаясь либо вправо, либо вверх. Необходимо
собрать максимальную сумму монет на пройденных ячейках.

1. longedok 09.12.2010 10:04 Miranda

Простенькая задачка на очередь.

2. hedgehog 09.12.2010 10:05 Psi+

динамическое программирование

3. johan 09.12.2010 10:05 Terárium pro ještěry

Вроде несложно.

4. artsjohan /3 09.12.2010 10:06 nedobook

Ну так предлагай решения, ёпт.

5. johanarts /4 09.12.2010 10:06 Terárium pro ještěry

Зачем?

6. artsjohan /5 09.12.2010 10:07 nedobook

Мне интересно, как другие эту задачу решат.

7. hedgehogarts /6 09.12.2010 10:08 Psi+

у нее одно правильное решение: методами динамического программирования. ссылки кидать не буду, все есть в гугле

8. werehuman 09.12.2010 10:09 lithium

man динамическое программирование

9. johanarts /6 09.12.2010 10:13 Terárium pro ještěry

Простейший (разумеется неправильный) способ: смотрим, где больше осталось потенциально доступных для собирания монеток — в строке или в столбце) — и идем, соответственно, вправо или влево.

10. artsjohan /9 09.12.2010 10:14 nedobook

Влево нельзя.

11. johanarts /10 09.12.2010 10:15 Terárium pro ještěry

Я в курсе.

12. johanarts /10 09.12.2010 10:15 Terárium pro ještěry

не влево а вверх.

13. hedgehogarts /10 09.12.2010 10:16 Psi+

#ofgtf/11
#ofgtf/12
программеры-программерчики

14. longedokjohan /9 09.12.2010 10:16 Miranda

Если по краям поля поставить по 100, а внутри по 1, то алгоритм будет работать неправильно.

15. johanlongedok /14 09.12.2010 10:22 Terárium pro ještěry

Я и написал, что он неправильный :-)

16. analizer 09.12.2010 10:37 wrok

видит Б-г, не хотел уходит из RL в п100 в этом году, но не вытерпел:
создаём копию поля, такого же размера, проходим последовательно ячейки по диагоналям идущим слева сверху вправо вниз начиная из правого верхнего угла. т.е. примерно такой порядок обхода 3×4:
__7__4__2__1
10__8__5__3
12_11__9__6
для всех клеток в порядке обхода прибавляем значение лежащее в соответствующей ячейке исходного поля к максимуму из значений лежащих в смежных клетках справа и сверху, если одной или обоих таких клеток нет (т.е. мы на границе поля), то считается что в них лежит нуль. (заодно запоминаем значение какой из клеток прибавили (чтоб проще было обратный путь строить)).
тащем-та когда алгоритм дойдёт до левого нижнего поля, то в нём окажется набранной максимальная возможная сумма. ну а обратный путь построить уже очевидно как.

З.Ы. @arts, спасибо за альтернативу жуйку.

17. werehumananalizer /16 09.12.2010 10:38 lithium

ты съебался оттуда?

18. analizerwerehuman /17 09.12.2010 10:38 wrok

в тот же день когда пошла первая волна предупреждений

19. longedokanalizer /16 09.12.2010 10:48 Miranda

Вернусь из универа — разберусь с твоим решением. А также, если мне будет не лень, напишу расово верное.

20. ulidtko 09.12.2010 17:51 lunatic asylum

динамическое программирование
;)

21. hedgehogulidtko /20 09.12.2010 17:52 Psi+

тред не читай @ сразу отвечай

22. ulidtkohedgehog /21 09.12.2010 18:26 lunatic asylum

тред читал, дублированным ответом лишний раз подъебал.
;)

23. longedokanalizer /16 09.12.2010 23:11 Miranda

Клёвый алгоритм получился. Моё решение с очередью проще кодом написать, чем объяснять, поэтому не буду этим заморачиваться.

Do you really want to delete ?