Analyse récursive d'un arbre binaire avec mémoïsation

Swift Hard functions

Tâche «Analyse récursive d'un arbre binaire avec mémoïsation»

Écrivez une fonction qui prend un arbre binaire, représenté sous forme d'un tableau d'entiers (parcours en largeur, null est noté 0), et renvoie la somme maximale des valeurs des nœuds de la racine à une feuille, à condition que l'on puisse sauter au plus deux nœuds consécutifs sur le chemin. Utilisez une fonction récursive avec mémoïsation pour un calcul efficace. L'arbre contient jusqu'à 1000 nœuds, les valeurs vont de -100 à 100.

Format d\ entrée

Première ligne : un entier n (1 ≤ n ≤ 1000) — le nombre d'éléments dans le tableau. Deuxième ligne : n entiers séparés par des espaces — la représentation en largeur de l'arbre (0 indique l'absence d'un nœud).

Format de sortie

Un entier unique — la somme maximale de la racine à une feuille en tenant compte de la possibilité de sauter au plus deux nœuds consécutifs.

Exemples

Exemple 1

ENTRÉE
3 ab bc ca
SORTIE
6

Exemple 2

ENTRÉE
1 10
SORTIE
10

Exemple 3

ENTRÉE
5 10 5 15 0 0
SORTIE
25

Exemple 4

ENTRÉE
2 abc def
SORTIE
0
main.swift