Bonjour à tous,
J'aimerais vérifier quelque chose pour l'algorithme de Carré. Je voudrais juste vérifier que l'algorithme naïf est bien celui que je pense. Parce que mon algorithme qui passe les limites de temps donne le même résultat que le naïf, et qu'il ne passe pas le test 5.
L'algorithme naïf est-il bien le suivant ?
On pose Ways(X, Y) le nombre de chemins possibles vers l'arrivée à partie de la case (X, Y)
Ways(X, Y) = Ways(X + 1, Y) + Ways(X, Y + 1)
Ways(N - 1, N - 1) = 1
Ways(X >= N, Y) = 0
Ways(X, Y >= N) = 0
Ways(X, Y) si (X, Y) est un mur = 0
Le plus étonnant est que le test 5 est donne officiellement presque le même résultat que le mien, à trois chiffres près (j'ai "908" préfixé à la valeur "officielle").
J'ai affiché l'entrée sur stderr, et j'ai testé l'entrée avec l'algorithme naïf. Après un peu de moulinage, il donne le même résultat que mon algorithme évolué.
Donc où est-ce que je me trompe ?
Merci d'avance,
Ekleog (le hérisson écrasé)
[Edit : Même souci avec Vista. L'algorithme naïf que je vois est quasiment le même, avec N+1 et M+1 à la place de N et
M.]
[Edit bis : Ah, non, le problème n'est pas là pour Vista. Le problème vient de unsigned long long qui n'est tout de
même pas assez grand pour contenir la valeur pour (19, 20). Au passage, la réponse proposée n'est pas valide non plus,
vu que (pour mon programme, du moins), (18, 20) vaut 18446744072927813858 - et que je suppose que (19, 20) vaut plus]