J'ai reçu cette question de l'entrevue et a été collée sur elle:
Il y a un nombre infini de train s'arrête à partir de la station de numéro 0.
Il y a un nombre infini de trains. Le n-ième train s'arrête à toutes les k * 2^(n - 1) s'arrête là où k est compris entre 0 et l'infini.
Lorsque n = 1, le premier train s'arrête à l'arrêt 0, 1, 2, 3, 4, 5, 6, etc.
Lorsque n = 2, le deuxième train s'arrête à l'arrêt 0, 2, 4, 6, 8, etc.
Lorsque n = 3, le troisième train s'arrête à l'arrêt 0, 4, 8, 12, etc.
Compte tenu de commencer numéro de la station et à la fin de la station de numéro de retour, le nombre minimum d'arrêts entre eux. Vous pouvez utiliser l'un des trains pour se rendre d'un arrêt à un autre arrêt.
Par exemple, le nombre minimum d'arrêts entre start = 1 et fin = 4 est 3, car nous pouvons obtenir à partir de 1 à 2 à 4.
Je suis en train de réfléchir à une programmation dynamique solution serait de stocker en dp[start][end]
le nombre minimum d'étapes entre start
et end
. Nous aimerions construire le tableau à l'aide d' start...mid1, mid1...mid2, mid2...mid3, ..., midn...end
. Mais je n'ai pas réussi à le faire fonctionner. Comment voulez-vous résoudre ce problème?
Précisions:
- Les Trains ne peuvent avancer qu'à partir d'un nombre inférieur de l'arrêter à un nombre plus élevé d'arrêt.
- Un train peut commencer à n'importe quelle station où il fait un arrêt au.
- Les Trains peuvent être embarqués dans n'importe quel ordre. N = 1 train peuvent être montés à bord avant ou après l'embarquement n = 3 train.
- Les Trains peuvent être embarqués à plusieurs reprises. Par exemple, il est autorisé à bord de la n = 1 train, à côté du conseil de la n = 2) former, et enfin du conseil de la n = 1 le train de nouveau.