. Les symboles doivent être consécutifs.Trouver un maximum de symbole différent dans C[], sinon si x symboles sont égaux, prendre celui qui a le plus grand T[i]
recurAPosBNeg(i,n)
if i==n-1
retour
if c_i==c(i+1)
s += A*T(i+1)
recurAPosBNeg(i+1, n)
appel avec s (variable globale==0), recurAPosBNeg(0, n)
recurAAnyBNeg(i,n)
if i==n-1
retour 0
if c_i==c(i+1)
retourner max(0, A*T(i+1)) + recurAPosBNeg(i+1, n)
retourner recurAPosBNeg(i+1, n)
recurAAnyBAny(i,n)
if i==n-1
retour 0
if c_i==c(i+1)
retourner max(0, A*T(i+1)) + recurAPosBNeg(i+1, n)
if c_i!=c(i+1)
retourner max(0, B*T(i+1)) + recurAPosBNeg(i+1, n)
evidemment tu n'as jamais prélevé le premier elem mais comme ca serait B*T0 tu en veux pas donc c'est bon.
Il est obligatoire de visiter la première valeur je suppose, comme on peut le voir dans l'exemple 2 :
Il faut qu'à chaque fois qu'un emplacement "i" est visité on stocke sont indice dans une liste "emplacementsVisités". Ce qui signifie qu'à chaque emplacement, on ne va pas vérifier si C[i] == C[i - 1], mais on va vérifier si C[i] == C[emplacementsVisités[-1]].
recAAnyBAny(i,n,lastVisitedSymbole)
if i==n-1
retourner 0
retourner max(
recAAnyBAny(i+1,n, lastVisitedSymbole)# pas de visite
si c_(i+1)==lastVisitedSymbole:
A*T(i+1) + recAAnyBAny(i+1, n, lastVisitedSymbole)
sinon
B*T(i+1) + recAAnyBAny(i+1, n, C(i+1))
)
Il est obligatoire de visiter la première valeur je suppose
T = (9,7,8,7,10,7)
C = (2,1,1,4,4,2)
A = -2
B = 5
def V(i, n, last=-5):
if i == n-1:
return 0
if C[i+1] == last:
return max( V(i+1, n, last), A*T[i+1] + V(i+1, n, last) )
return max( V(i+1, n, last), B*T[i+1] + V(i+1, n, C[i+1]) )
print(V(-1, 6))
T = (3,9,2,7,3,1)
C = (2,2,5,4,2,1)
A=2
B=-5
print(V(-1, 6))
170
9
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 12 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :