Salut! Am doua siruri cu cifre X,Y de lungime n respectiv m si vreau sa aflu cel mai lung subsir comun de valoare maxima.Am facut cel mai lung subsir comun cu algoritmul clasic ,dar nu stiu cum pot reconstitui cel mai lung subsir cu valoare maxima.
.Am incercat urmatoarea varianta dar nu merge in toate cazurile.Cum as putea face sa mearga ??
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
if(X[i]==Y[j])
SC[i][j]=1+SC[i-1][j-1];//cel mai lung
else
SC[i][j]=max(SC[i][j-1],SC[i-1][j]);//subsir comun
}
pmx=n;pmy=m;
for(k=SC[n][m];k>=1;k--){//caut pozitia de lungime k cu cea mai mare cifra
mx=-1;
for(i=pmx;i>=1;i--)
for(j=pmy;j>=1;j--)
if(SC[i][j]==k && X[i]==Y[j] && X[i]>mx){
mx=X[i];pmx2=i;pmy2=j;
}
sol[++sol[0]]=mx;//retin maximul
pmx=pmx2;pmy=pmy2;
}
for(i=sol[0];i>=1;i--)
printf("%d",sol[i]);
printf("\n");