• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie "Wypracowanie" związane z programowaniem dynamicznym i LCS

0 głosów
162 wizyt
pytanie zadane 24 listopada 2020 w Algorytmy przez wojtek_suchy Mądrala (6,880 p.)

Mam takie zadanie:

Mam takie zadanie Wypracowanie
Obliczam LCS i nie wiem w jaki sposób teraz obliczyć ilość zmian jakie trzeba zrobić, czy mógłby mi ktoś pomóc :)
Mój kod:

#include <bits/stdc++.h>                                                        

using namespace std;                                                            

int calculate_lcs(string & good, string & bad){                                 
    vector<vector<int>> dp (good.length() + 1, vector<int>(bad.length() + 1));  

    for (int i = 0; i <= good.length(); i++)                                    
        dp[i][0] = 0;                                                           
    for (int j = 0; j <= bad.length(); j++)                                     
        dp[0][j] = 0;                                                           

    for (int i = 0; i < good.length(); i++){                                    
        for (int j = 0; j < bad.length(); j++){                                 
            if (good[i] == bad[j])                                              
                dp[i+1][j+1] = dp[i][j] + 1;                                    
            else                                                                
                dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1]);                     
        }                                                                       
    }

    return 2137; //co ja mam tutaj zwrócić żeby obliczyć ile trzeba zrobić zmian ?
}                                                                               

int main(){                                                                     
    ios::sync_with_stdio(0);                                                    
    cin.tie(NULL);                                                              

    string good, bad;                                                           
    int n;                                                                      

    cin >> good;                                                                
    cin >> n;                                                                   

    for (int i = 0; i < n; i++){                                                
        cin >> bad;                                                             
        cout << calculate_lcs(good, bad) << "\n";                               
    }                                                                           

    return 0;                                                                   
} 

1 odpowiedź

+1 głos
odpowiedź 24 listopada 2020 przez Whistleroosh Maniak (57,400 p.)
wybrane 24 listopada 2020 przez wojtek_suchy
 
Najlepsza
Tego nie rozwiązuje się akurat za pomocą LCS, ale algorytmem bardzo podobnym. Potrzebujesz policzyć edit distance między tymi dwoma stringami. Poczytaj o tym w internecie

Podobne pytania

0 głosów
0 odpowiedzi 618 wizyt
0 głosów
1 odpowiedź 283 wizyt
pytanie zadane 7 września 2020 w Offtop przez lukasz07it Początkujący (290 p.)
0 głosów
3 odpowiedzi 1,019 wizyt

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,325 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...