Это проблема динамического программирования , поэтому вы можете решить ее, используя методы динамического программирования.
Итак, если у нас есть эти кусочки:
45 36 46 56
Что самая длинная цепь из 4 костей ?Очевидно, самая длинная цепь, которая может быть сделана из 3 костей и еще 1 кости.
Что такое самая длинная цепь, которая может быть сделана из 3 костей ?Очевидно, самая длинная цепь, которая может быть сделана из 2 костей и еще 1 кости.
Что такое самая длинная цепь, которая может быть сделана из 2 костей ?Очевидно, самая длинная цепь, которая может быть сделана из 1 кости и еще 1 кости.
Что такое самая длинная цепь, которая может быть сделана из 1 кости ?Очевидно, что 1 кость - самая длинная из возможных цепей.
Я думаю, вы видите по шаблону здесь, нам нужно использовать рекурсию.
Так что если у нас есть:
45 36 46 56
Предположим, у нас есть функция longest_chain(set_of_pieces)
.Затем нам нужно проверить:
longest_chain({36 46 56}) (+ 1 if we can append 45 or 54 else discard this chain)
longest_chain({45 46 56}) (+ 1 if we can append 36 or 63 else discard this chain)
longest_chain({45 36 56}) (+ 1 if we can append 46 or 64 else discard this chain)
longest_chain({45 36 46}) (+ 1 if we can append 56 or 65 else discard this chain)
что такое longest_chain({36 46 56})
?
longest_chain({46 56}) (+ 1 if we can append 36 or 63 else discard this chain)
longest_chain({36 56}) (+ 1 if we can append 46 or 64 else discard this chain)
longest_chain({36 46}) (+ 1 if we can append 56 or 65 else discard this chain)
что такое longest_chain({46 56})
?
longest_chain({46}) (+ 1 if we can append 56 or 65 else discard this chain)
longest_chain({56}) (+ 1 if we can append 46 or 64 else discard this chain)
что такое longest_chain({46})
?Две возможности: {46} {64}
Можем ли мы добавить 56 или 65 к любому из них?Да, мы можем сделать эту цепочку {46, 65}
, и мы отбрасываем {64}
.
Сделайте то же самое с longest_chain({56})
, и мы получим: {56, 64}
.
Поэтому мы теперь знаем, что longest_chain({46 56})
{46, 65}, {56, 64}
Продолжайте делать это, пока не получите все ответы.
Надеюсь, это поможет.