Я читаю этот отличный учебник Думитру по проблемам на основе DP здесь. И я пытаюсь придумать подход на основе DP для FlowerGarden проблема указана в списке проблем 1D DP.
Я могу думать только о решении без DP, которое включало бы первоначальную сортировку цветов по порядку, а затем их переупорядочивание на основе различных проверок условий, упомянутых в задаче. Это не классифицируется как DP, не так ли?
В редакционной статье также ничего не упоминается о DP. Может ли кто-нибудь случайно указать мне правильное решение этой проблемы на основе DP?
Спасибо!
Редактировать:
Я не знал, что ссылка требует регистрации. Это проблема:
Постановка задачи Вы сажаете цветник луковицами, которые будут радовать вас круглый год. Однако вы хотите посадить цветы так, чтобы они не блокировали другие цветы, пока их видно.
Вам будет предоставлена высота int[] , цветение int[] и увядание int[] . Каждый тип цветка представлен элементом с одинаковым показателем высоты, цветения и увядания. высота показывает, насколько высоко растет каждый тип цветка, цветение представляет собой утро, когда каждый тип цветка появляется из земли, а увядание представляет вечер, когда каждый тип цветка сморщивается и умирает. Каждый элемент в параметрах «цветение» и «увядание» будет числом от 1 до 365 включительно, а «увядание[i]» всегда будет больше, чем «цветение[i]». Вы должны посадить все цветы одного типа в один ряд для внешнего вида, и вы также хотите, чтобы самые высокие цветы были как можно дальше вперед. Однако, если один тип цветка выше другого, и оба типа могут находиться над землей одновременно, более низкий цветок необходимо посадить перед более высоким цветком, чтобы предотвратить блокировку. Цветок расцветает утром, а вечером увядает, поэтому, даже если один цветок расцветает в тот же день, когда другой цветок увядает, один может блокировать другой.
Вы должны вернуть int[], который содержит элементы высоты в том порядке, в котором вы должны сажать цветы для достижения вышеуказанных целей. Передняя часть сада представлена первым элементом возвращаемого значения, откуда вы смотрите на сад. Все элементы высоты будут уникальными, поэтому всегда будет четко определенный порядок.
Изменить два:
Пример 1:
высота={5,4,3,2,1}
цветение={1,1,1,1,1}
увядание = {365 365 365 365 365}
Возвращает: {1, 2, 3, 4, 5}
Все эти цветы распускаются 1 января и увядают 31 декабря. Поскольку все они могут блокировать друг друга, вы должны упорядочить их от самых низких до самых высоких.
Пример 2:
h={5,4,3,2,1}
b={1,5,10,15,20}
w={4,9,14,19,24}
Возвраты: { 5, 4, 3, 2, 1 } Один и тот же набор цветов теперь расцветает в разное время. Поскольку они никогда не будут блокировать друг друга, вы можете расположить их от самого высокого к самому низкому, чтобы самые высокие оказались как можно дальше вперед.
Пример 3: высота={5,4,3,2,1}
цветение={1,5,10,15,20}
увядание={5,10,14,20,25}
Возвраты: { 3, 4, 5, 1, 2 } Разница здесь в том, что третий тип цветка увядает на день раньше, чем распускается четвертый цветок. Следовательно, мы можем поставить сначала цветы высоты 3, затем цветы высоты 4, затем высоты 5 и, наконец, цветы высоты 1 и 2. Заметим, что мы могли бы также сначала расположить их высотой 1, но это не так. в результате максимально возможная высота будет первой в саду.