Представьте себе преданного, желающего приносить жертвы храмам вдоль горного хребта. Храмы расположены в ряд на разных высотах. Каждый храм должен получить хотя бы одно пожертвование. Если два соседних храма находятся на разных высотах, то храм, который находится выше, должен получать больше приношений, чем тот, который находится ниже. Если два соседних храма находятся на одной высоте, то их предложения относительно друг друга не имеют значения. Учитывая количество храмов и высоту храмов в порядке, найдите минимальное количество предложений, чтобы принести.
Примеры:
Input : 3 1 2 2 Output : 4 All temples must receive at-least one offering. Now, the second temple is at a higher altitude compared to the first one. Thus it receives one extra offering. The second temple and third temple are at the same height, so we do not need to modify the offerings. Offerings given are therefore: 1, 2, 1 giving a total of 4. Input : 6 1 4 3 6 2 1 Output : 10 We can distribute the offerings in the following way, 1, 2, 1, 3, 2, 1. The second temple has to receive more offerings than the first due to its height being higher. The fourth must receive more than the fifth, which in turn must receive more than the sixth. Thus the total becomes 10.
Мы замечаем, что каждый храм может быть выше, ниже или на том же уровне, что и храм рядом с ним. Подношения, требуемые в каждом храме, равны максимальной длине цепочки храмов на более низкой высоте, как показано на рисунке.
Наивный подход
Чтобы следовать данному правилу, храм должен быть предложен как минимум x + 1, где x — максимум следующих двух.
- Количество храмов слева в порядке возрастания.
- Количество храмов справа в порядке возрастания.
Наивным методом решения этой проблемы будет для каждого храма: идти налево до увеличения высоты и делать то же самое для правого.
|
Джава
|
python3
|
C #
|
PHP
|
Выход:
4 10
Временная сложность: O (n 2 )
Пространство сложность: O (1)
Подход динамического программирования
Используя динамическое программирование, мы можем улучшить сложность времени. В этом методе мы создаем структуру длины n, которая поддерживает максимальную убывающую цепь слева от каждого храма и максимальную убывающую цепь справа от каждого храма. Проходим один раз от 0 до N, устанавливая значение left для каждого храма. Затем мы идем от N до 0, устанавливая значение права для каждого храма. Затем мы сравниваем два и выбираем максимум для каждого храма.
|
Выход:
4 10
Временная сложность: O (n)
Пространственная сложность: O (n)
Эта статья предоставлена Адитьей Каматом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Ожидаемое количество ходов, чтобы достичь конца доски | Динамическое программирование
- Найти минимальную разность пути от (0, 0) до (N-1, M-1)
- Количество подпоследовательностей в данной двоичной строке, делимое на 2
- Рюкзак с большими весами
- Сумма длин всех возможных путей в данном дереве
- Количество ячеек в матрице, которые удовлетворяют данному условию
- Самая длинная подпоследовательность с разницей не более K
- Проверьте, находится ли данный узел на пути между узлами U и V
- K-й предок узла в N-арном дереве с использованием техники бинарного лифтинга
- Количество целых чисел из диапазона [0, N], сумма цифр которых кратна K
- Максимальная сумма подмассива после изменения массива
- Минимальная стоимость разбиения заданной двоичной строки
- Максимизируйте сумму, выбирая элементы из разных разделов матрицы
- Максимально возможный GCD после замены не более одного элемента в данном массиве
0.00 (0%) 0 votes