Modyfikacja programu, podciągi

0

Jak przerobić program aby wyświetlał wartości podciągu a nie tylko wyświetlał ile ich jest:

#include <bits/stdc++.h>
using namespace std;
int lds(int arr[], int n)
{
    int lds[n];
    int i, j, max = 0;
    for (i = 0; i < n; i++)
        lds[i] = 1;
    for (i = 1; i < n; i++)
        for (j = 0; j < i; j++)
            if (arr[i] < arr[j] && lds[i] < lds[j] + 1)
                lds[i] = lds[j] + 1;

    for (i = 0; i < n; i++)
        if (max < lds[i])
            max = lds[i];
    return max;
}
int main()
{
    int arr[] = { 15, 27, 14, 38, 63, 55, 46, 65, 85, 94};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Length of LDS is " << lds(arr, n);
    return 0;
}
1

Zamenić: int lds[n];
Na: struct { int value,prevx,prevy; } lds[n][n] {0,-1,-1};

0

@_13th_Dragon: Jest możliwe napisanie tego zadania (malejący podciąg o największej
długości) w kodzie na poziomie początkującym (podstawy)?

0

Jak rozumiesz algorytm to czemu nie?
Jak nie rozumiesz zajrzyj na Wikipedii, podano w pseudo kodzie.
Jak nadal nie rozumiesz to zrób swój prosty algorytm, //no chyba że są jakieś wymagania czasowe//.

3

Może lepiej zacznij od napisania tego kodu od nowa.
Twoje rozwiażanie ma kwadratową złożoność czasową i liniową pamięciową, a powinno być liniowa złożoność czasowa i stała złożoność pamięciowa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1