Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 10

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

09.05.2021, 21:07. Показов 6851. Ответов 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 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru