13 / 13 / 9
Регистрация: 28.07.2017
Сообщений: 103
|
||||||
1 | ||||||
Задачу "Мышка и зернышки" решить с использованием динамической памяти17.02.2018, 22:45. Показов 1300. Ответов 11
Здравствуйте. Такая задача была уже описана ранее. Вот только хочу ее решить с использованием динамической памяти, поэтому использовался вектор.
Условие: Кликните здесь для просмотра всего текста
В индийском храме пол прямоугольной формы выложен одинаковыми квадратными плитками 1 х 1, на каждую из которых высыпано от 0 до k зернышек (k ≤ 30000). Размеры пола m х n. Мышка выбегает из левого нижнего угла пола храма и двигается к входу в другую норку, расположенную в противоположном углу. Мышка может двигаться только вправо или вперед, собирая все зернышки с плитки, на которой она находится. Найти маршрут, двигаясь по которому мышка соберет наибольшее количество зернышек. Входные данные: Первая строка содержит числа m и n – размеры пола (1 ≤ m, n ≤ 100). Далее идет m строк, начиная сверху, в каждой из которых размещено n чисел – количество зернышек на соответствующей плитке. Выходные данные: Вывести маршрут движения мышки в формате: RRFFFRF (F – шаг вперед, R – шаг вправо). Вот код:
0
|
17.02.2018, 22:45 | |
Ответы с готовыми решениями:
11
Динамическое программирование: Мышка и зернышки Помогите пожалуйста решить задачу с динамической памятью и указателями зaдача с использованием динамической памяти Решить задачу с использованием цикла While-until Решить задачу с использованием массивов |
13 / 13 / 9
Регистрация: 28.07.2017
Сообщений: 103
|
|
17.02.2018, 22:57 [ТС] | 3 |
0
|
13 / 13 / 9
Регистрация: 28.07.2017
Сообщений: 103
|
|
17.02.2018, 23:16 [ТС] | 5 |
Nishen, т.е. vector использует обертку динамической памяти, а саму динамическую память использует массив созданный через new?
0
|
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
|
|
17.02.2018, 23:52 | 6 |
Ну, вы когда вектор используете, сами с памятью не работаете вручную. Вместо вас это делают методы класса vector, кем-то написанного для вас. Если речь идёт о работе с динамической памятью, надо с ней работать самому, я думаю: выделять необходимое количество самому и освобождать.
0
|
║XLR8║
|
||||||||||||||||
18.02.2018, 02:27 | 7 | |||||||||||||||
Сообщение было отмечено dude78 как решение
Решение
dude78, во первых: тебе динамаческая память в этой задаче как собаке 5я нога. Создал массив и радуешься, благо есть
std::array Это делается в 1 строку
try { .. } catch(...) { ... } std::vector::at Функция main должна возращать int .Сейчас short это уже не всегда самый удобный тип данных для процессора, лучше int используй, а лучше беззнаковый unsigned Зачем тебе макрос когда есть std::max из <algorithm> ?Писал бы сразу в выходной поток посимвольно. Ну или std::stringstream но я бы те 200 символов сразу написал бы в потом не парился, это не самое долгое что тут делается.А реверс вообще лишний, кто сказал что надо вывод надо начинать с той точки откуда мышь начала двигаться? Добавлено через 7 минут Массив 100 на 100... на 10 000 элементов тебе нужен вектор? Перевод строки не забывай добавлять в конце. Добавлено через 1 час 43 минуты dude78, Решил Проверь работу на этих тестах: Кликните здесь для просмотра всего текста
Код
$ ./test.sh Test: 1 2 3 3 2 4 1 5 1 Output: RFR Test: 2 5 1 1 1 1 1 1 Output: FFFF Test: 3 4 4 0 1 1 1 0 0 0 0 0 0 2 0 1 0 0 0 Output: FRRFFR Test: 4 4 4 2 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 Output: RRRFFF Test: 5 2 2 0 0 0 0 Output: FR
Ну и если захочешь считерить смотри мое решение: Кликните здесь для просмотра всего текста
1
|
13 / 13 / 9
Регистрация: 28.07.2017
Сообщений: 103
|
||||||
18.02.2018, 03:19 [ТС] | 8 | |||||
outoftime, Спасибо . Валилось на тестах, когда на плитках лежало 0 зерен.
Вот код, который получился: Кликните здесь для просмотра всего текста
И ссылка на результат.
0
|
13 / 13 / 9
Регистрация: 28.07.2017
Сообщений: 103
|
||||||||||||||||
18.02.2018, 17:04 [ТС] | 10 | |||||||||||||||
outoftime,
Как я поня, то проверка имеет такой вид:
Например,
0
|
║XLR8║
|
|
18.02.2018, 19:26 | 11 |
dude78, да, но, одно БОЛЬШОЕ но: когда пипешь программу для ACM никто твой код смотреть не будет, пока ты в первый эшелонг не попадешь, но главное - скорость и тот факт что даже если ты отловишь выход за пределы массива тебе этот выход надо обрабатывать, и тут, опять, это всё дело ударяеет по скорость работы.
Если в двух словах: вызов std::vector::at бьет по производительности, и если у тебя четко заданы входные параметры и ты решаешь задачу на время тебе не надо никакие исключения, если они у тебя есть - что-то пошло не так. Вот почему я даже от вектора избавился в своем решении и использовал std::array , у него скорость работы как у обычных массивов и те пару килобайт которые я постоянно отжираю проходят условие задачи. Представь у астронавта полетело ПО, собрали быстро команду из тех кого увидили и сказали вот входные данные, нужно чтобы выходные были вот такими чтобы ПО работало. Это задача на время с ограчениями по ресурсам и важно здесь всё. Я не скажу что это хороший подход или что такие ситуации бывают в реале. Просто лучше делать всё по максимуму быстрым без удара по чему либо, а потом, в каком-то месте вместо рукописного кода добавить STL который даст немного накладных расходов, которые по прежднему будут в пределах условия задачи, и сэкономят определенное время. Меня понесло, будет вопрос - будет ответ.
1
|
13 / 13 / 9
Регистрация: 28.07.2017
Сообщений: 103
|
|
18.02.2018, 19:59 [ТС] | 12 |
outoftime, Спасибо .
0
|
18.02.2018, 19:59 | |
18.02.2018, 19:59 | |
Помогаю со студенческими работами здесь
12
Решить задачу с использованием рекурсии Решить задачу с использованием процедуры. Решить задачу с использованием функции. Симметричность массива с использованием динамической памяти Написать программу с использованием динамической памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |