The longest common subsequence problem is typically solved using a bottom-up dynamic programming approach.