import numpy as np D= {} def par_rec(L, i, j): if (i, j) in D : return D[i, j] elif i == j : res = 0 else : min = L[i]*L[i+1]*L[j+1] + par_rec(L, i+1, j) for k in range(i+1, j): gauche = par_rec(L, i, k) droite = par_rec(L, k+1, j) min_pot = gauche + droite + L[i]*L[k+1]*L[j+1] if min_pot i : G = '(' + G + ')' if j > k+1 : D = '(' + D + ')' return G + D