Ceci est un problème dynamic programming, donc vous pouvez le résoudre en utilisant des techniques de programmation dynamique.
Donc, si nous avons ces pièces:
45 36 46 56
Quelle est la plus longue chaîne qui peut être fait à partir de 4 os?
De toute évidence, la plus longue chaîne qui peut être faite à partir de 3 os et 1 os de plus.
Quelle est la plus longue chaîne qui peut être faite à partir de 3 os?
De toute évidence, la plus longue chaîne qui peut être faite à partir de 2 os et 1 os de plus.
Quelle est la plus longue chaîne qui peut être faite à partir de 2 os?
De toute évidence, la plus longue chaîne qui peut être faite à partir de 1 os et 1 os de plus.
Quelle est la plus longue chaîne qui peut être fabriqué à partir de 1 os?
Évidemment, 1 os est la chaîne la plus longue possible.
Je pense que vous voyez par le modèle ici, nous devons utiliser la récursivité.
Donc, si nous avons:
45 36 46 56
Supposons que nous avons une fonction longest_chain(set_of_pieces)
. Ensuite, nous devons vérifier:
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)
Qu'est-ce que 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)
qu'est-ce que 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)
qu'est-ce que longest_chain({46})
? Deux possibilités: {46} {64}
Peut-on ajouter 56 ou 65 à l'un de ces éléments? Oui, nous pouvons faire cette chaîne {46, 65}
et nous éliminons {64}
. Faites la même chose avec longest_chain({56})
et nous obtenons: {56, 64}
.
Par conséquent, nous savons maintenant que longest_chain({46 56})
sont {46, 65}, {56, 64}
Continuez jusqu'à ce que vous obtenez toutes les réponses.
Espérons que cela aide.
Cela doit compter les variations. –
@Null Set: pas besoin, avec quelques astuces, toutes les variations seront traitées automatiquement. –
Les chaînes inversées sont considérées comme identiques et ne sont pas comptées comme des variations. –