最長増加部分列問題(Longest Increasing Subsequence, LIS)は、与えられた数列の中で、任意の要素を取り出して並べた部分列のうち、昇順になっている最長のものを見つける問題です。例えば、[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7]という数列があるとき、その最長増加部分列は[1, 2, 5, 8, 9]です。 この問題は、動的計画法や二分探索を使って効率的に解くことができます。以下では、Pythonでそれぞれの方法を実装して解説します。 動的計画法による解法 動的計画法は、前処理を行っておくことで、任意のiに対して、i以下の位置…