int LCS(string a, string b, string c, int n, int m, int k) { vector<vector<vector<int>>> dp(n + 1, vector<vector<int>>(m + 1, vector<int>(k + 1, 0))); for(int s1 = 1;s1 <= n; s1++) { for(int s2 = 1;s2 <= m; s2++) { for(int s3 = 1;s3 <= k;s3++) { int inc = -1e9; if(a[s1 - 1] == b[s2 - 1] and a[s1 - 1] == c[s3 - 1]) { inc = 1 + dp[s1 - 1][s2 - 1][s3 - 1]; } int *arr = new int[6]; arr[0] = dp[s1 - 1][s2][s3]; arr[1] = dp[s1][s2 - 1][s3]; arr[2] = dp[s1][s2][s3 - 1]; arr[3] = dp[s1 - 1][s2 - 1][s3]; arr[4] = dp[s1 - 1][s2][s3 - 1]; arr[5] = dp[s1][s2 - 1][s3 - 1]; int maxi = -1e9; for(int i=0;i<6;i++) { maxi = max(maxi, arr[i]); } dp[s1][s2][s3] = max(maxi, inc); delete arr; } } } return dp[n][m][k]; }