Здравствуйте, мн надо решить задачу "Зайчик".
Условия таковы: http://acmp.ru/index.asp?main=task&id_task=11
Я написал решение, но оказалось, что оно слишком медленно работает.
Помогите мне пожалуйста оптимизировать код, он рабочий, но слишком медленный
Вот код: http://pastebin.com/dijNzXwi
Другие языки программирования и технологии
Помогите пожалуйста оптимизировать решение задачи (Зайчик) на C++
Это классическая задача на динамическое программирование. Твой код работает намного медленнее, чем мог бы, потому что он оказывается на каждой позиции лестницы всегда, когда проходит по лежащему через нее пути, а достаточно всего одного раза.
1) Создай и занули массив чисел от 0 до N включительно
2) Положи в нулевой элемент (тот, который отвечает за то, что заяц на земле) единицу. То есть мы предполагаем, что на земле заяц стоит всего одним способом.
3) Иди по массиву и для каждой i-й ячейки выполняй цикл для j от 1 до k, прибавляя к [i+j]-й ячейке содержимое i-й.
У тебя получится, что в каждой ячейке находится количество способов в нее попасть, то есть в N-й ячейке количество способов попасть в N-ю ячейку.
Сложность получается N*K, что для таких маленьких N и K - фактически ничего.
Кстати, я даю уроки программирования. Самым способным бесплатно.
1) Создай и занули массив чисел от 0 до N включительно
2) Положи в нулевой элемент (тот, который отвечает за то, что заяц на земле) единицу. То есть мы предполагаем, что на земле заяц стоит всего одним способом.
3) Иди по массиву и для каждой i-й ячейки выполняй цикл для j от 1 до k, прибавляя к [i+j]-й ячейке содержимое i-й.
У тебя получится, что в каждой ячейке находится количество способов в нее попасть, то есть в N-й ячейке количество способов попасть в N-ю ячейку.
Сложность получается N*K, что для таких маленьких N и K - фактически ничего.
Кстати, я даю уроки программирования. Самым способным бесплатно.
Ruslan B
Спасибо! Но, за что отвечает k?
Для си вообще можно писать N и K так будет код еще понятней.
И ты хочешь сказать "Время: 1 сек" - оно решает дольше секунды?
И ты хочешь сказать "Время: 1 сек" - оно решает дольше секунды?
Ruslan B
Если ввести, например входные данные 100 и 100, то там ужс сколько. А ведь ограничение целых 300 на вход.
И система тестирования пишет Time limit exceeded
И система тестирования пишет Time limit exceeded
глянь на моего зайку
http://pastebin.com/WYghPFJW
идея в том, чтобы выходить по возможности раньше.
на тесте 10 30 проскакал в три раза быстрее твоего варианта
http://pastebin.com/WYghPFJW
идея в том, чтобы выходить по возможности раньше.
на тесте 10 30 проскакал в три раза быстрее твоего варианта
Ruslan B
Я над таким вариантом думал. Обидно, но похоже тут рекурсия не пройдет.
Слишком медленно работают и твой и мой варианты.
Тут, кажется, только динамика, в которой я полный нуль.
Слишком медленно работают и твой и мой варианты.
Тут, кажется, только динамика, в которой я полный нуль.
Я хотел подумать над формулой, а потом смотрю... у тя в рекурентной функции ретёрна нет.... ты как хотел из неё выйти??
@ Мерей @ Мукатаев
Есть у него база рекурсии. А ретерна нет, потому что тип void. Не путай тут!
Ruslan B
Она просматривает все варианты, а потом вырубается.
Она выходит :)
Просто на высоких значениях слишком долго решает. На малых значениях и завершается, и ответ правильный даёт)
Она выходит :)
Просто на высоких значениях слишком долго решает. На малых значениях и завершается, и ответ правильный даёт)
Для си вообще можно писать N и K так будет код еще понятней.
И ты хочешь сказать "Время: 1 сек" - оно решает дольше секунды?
И ты хочешь сказать "Время: 1 сек" - оно решает дольше секунды?
Похожие вопросы
- Помогите, пожалуйста, с решением задачи из задачника Абрамяна.
- Помогите пожалуйста с решением задач в паскале
- Помогите пожалуйста с решением задачи, если можно объясните как расшифровать.
- Помогите пожалуйста оптимизировать C++ код
- Помогите составить алгоритм решения задачи
- помогите пожалуйста, люди добрые. задача на C#.
- решение задачи на python, c++, java
- Помогите пожалуйста составить решение с задачей по программированию(на любом языке программирования)
- Помогите пожалуйста, решить данную задачу методом пузырька!!!
- Помогите пожалуйста исправить код программы на visual c++!!