0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 10

Решение задачи про кузнечика путём динамического программирования

09.05.2021, 21:07. Показов 6876. Ответов 7

Студворк — интернет-сервис помощи студентам
Всем привет! Написал код для решения следующей задачи:

Кузнечик
Кузнечик прыгает по цветам, расположенным на прямой. На каждом цветке находится пыльца. В начале пути кузнечик находится на земле.

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

Формат входных данных
Две строки. В первой - количество цветков, N. Во второй массив длины N - количество пыльцы (от 1 до 100) на каждом цветке.

Формат выходных данных
Две строки. В первой - минимальное количество пыльцы, которой запачкается кузнечик. Во второй - путь кузнечика. Путь представляет из себя номера цветков, которые посетит кузнечик. Нумерация цветков с нуля.

Примеры
Ввод
3
1 3 1
Вывод
2
0 2

Ввод
4
2 1 5 1
Вывод
2
1 3

Проблема моего кода в том, что он не проходит некоторые тесты, которые от меня скрыты. Проверял код на тетради в ручную, вроде бы всё работает. Прошу объяснить в чём проблема. Заранее спасибо!
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def minimum(F: list):
    pollen_array = []
    if len(F) < 3:
        pollen_array.append(0)
        return F[1], pollen_array
    elif len(F) == 3:
        pollen_array.append(F.index(min(F[1], F[2])) - 1)
        return min(F[1], F[2]), pollen_array
    else:
        pollen = 0
        i = 0
        while i < len(F) - 1:
            if i < len(F) - 2:
                pollen += min(F[i + 1], F[i + 2])
                i = F.index((min(F[i + 1], F[i + 2])), i + 1) if F[i + 1] != F[i+2] else i + 2
                pollen_array.append(i - 1)
            elif i == len(F) - 2:
                pollen += F[i + 1]
                pollen_array.append(i)
                break
    return pollen, pollen_array
 
 
n = int(input())
F = list(map(int, input().split()))
F.insert(0, 0)
 
a, b = minimum(F)
print(a)
print(*b)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2021, 21:07
Ответы с готовыми решениями:

Решение задачи динамического программирования
Здравствуйте, имеется следующая задача: Студент должен выбрать 10 факультативных курсов на четырех различных факультетах, причем на...

Решение задачи динамического программирования
Нет ли программы, в которую вводишь данные задачи и она решает её методом динамического программирования?

Решение задачи с использованием динамического программирования
Здравствуйте. Помогите пожалуйста решить следующую задачу используя динамическое программирование Из условия мне не понятно как...

7
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
09.05.2021, 21:59
Python
1
2
3
4
5
6
7
8
9
10
11
N = int(input())
arr = list(map(int, input().split()))
 
ways = [(arr[0], [0]), (arr[1], [1])]
 
for i in range(2, N):
    min_index = -1 if arr[i - 1] < arr[i - 2] else -2
    ways.append((arr[i] + ways[min_index][0], ways[min_index][1] + [i]))
 
print(ways[-1][0])
print(*ways[-1][1])
0
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 10
09.05.2021, 22:14  [ТС]
К сожалению, этот код также не проходит все тесты
0
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
09.05.2021, 22:15
GeloBer, Можно ссылку на тестирующую систему?
0
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 10
09.05.2021, 22:17  [ТС]
К сожалению, не могу её дать. Хотя, в любо случае, те тесты, которые не проходят код, скрыты от меня
0
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
09.05.2021, 22:21
GeloBer, В конце задачи нет никаких примечаний? Просто, могут быть случаи, когда несколькими путями можно одинаково запачкаться. Как решать такие спорные ситуации?
0
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 10
09.05.2021, 22:24  [ТС]
Скриншот задачи: https://www.cyberforum.ru/atta... 1620588251
Миниатюры
Решение задачи про кузнечика путём динамического программирования  
0
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 10
09.05.2021, 23:50  [ТС]
Задача решена. Исходный код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def minimum_pollen(f: list, n):
    c = [0] * len(f)
    c[0], c[1] = f[0], f[1]
    way = [[0]] * len(f)
    way[0], way[1] = [0], [1]
    for i in range(2, len(f)):
        c[i] = min(c[i - 1], c[i - 2]) + f[i]
        way[i] = way[c.index((min(c[i - 1], c[i - 2])), i - 2)] + [i]
    return c[n - 1], way[n - 1]
 
 
n = int(input())
f = list(map(int, input().split()))
tmp1, tmp2 = minimum_pollen(f, n)
print(tmp1)
print(*tmp2)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2021, 23:50
Помогаю со студенческими работами здесь

Решение задачи методом динамического программирования
Дан двумерный числовой массив размером N1xN2, N1 &lt; 20, N2 &lt; 20. Найти такой путь из клетки в клетку , чтобы сумма чисел по данному пути...

Решение задачи коммивояжера методом динамического программирования
Здравствуйте, возникла такая проблемка, я решил задачу коммивояжера использую алгоритм Форда-Беллмана...

Решение задачи о рюкзаке методом динамического программирования
Разбейте задачу на подзадачи и постройте рекуррентное соотношение для вычисления значений подзадач. Определите порядок вычисления...

Решение задачи Коммивояжера методом динамического программирования
Необходимо написать программу, которая решает задачу Коммивояжера методом динамического программирования (12 городов)

Решение задачи о ранце методом динамического программирования
Привет всему сообществу. Нужна ваша помощь. Я совершенно новичок в matlab и математике, задали задачку, где требуется определить, какие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru