Combate de algoritmos 1: programación dinámica: problema de la subsecuencia común más larga c ++

El siguiente es un código de muestra de un algoritmo de programación dinámica implementado en C++ para resolver el problema de la subsecuencia más larga (Subsecuencia común más larga):

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int longestCommonSubsequence(string text1, string text2) {
    
    
    int m = text1.length();
    int n = text2.length();

    // 创建二维数组dp,并初始化为0
    vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));

    for (int i = 1; i <= m; ++i) {
    
    
        for (int j = 1; j <= n; ++j) {
    
    
            if (text1[i - 1] == text2[j - 1]) {
    
    
                // 如果两个字符相等,则最长子序列长度加一
                dp[i][j] = dp[i - 1][j - 1] + 1;
            } else {
    
    
                // 否则取前一个状态的最大值
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
            }
        }
    }

    return dp[m][n];
}

int main() {
    
    
    string text1 = "abcde";
    string text2 = "ace";

    int result = longestCommonSubsequence(text1, text2);

    cout << "The length of the longest common subsequence is: " << result << endl;

    return 0;
}

El código anterior usa una matriz bidimensional dppara registrar la longitud de la subsecuencia común más larga. Al recorrer la cadena text1y text2, en función de si los caracteres actuales son iguales, actualice dpel valor de la matriz. Finalmente regresa dp[m][n]como la longitud de la subsecuencia común más larga.

Tenga en cuenta que el código anterior solo resuelve la longitud del problema de la subsecuencia común más larga. Si necesita obtener la subsecuencia común más larga específica (no solo la longitud), se requieren algunas operaciones adicionales. ¡Espero que este ejemplo te ayude!

Supongo que te gusta

Origin blog.csdn.net/weixin_42499608/article/details/131318979
Recomendado
Clasificación