[ALGORITHM] LIS


LIS(Longest increasing Subsequence

  • 最大増分部分数列

  • 「前」->「後」の数字を選択すると、「均一な部分」列の長さを最大限に延長し、数値順に増加します.

  • 例えば、配列{6,2,5,1,7,4,8,3}がある場合、LISは{2,5,7,8}である

  • {2,5,{2,7}などの増分部分の数列が多いが,その中で最も長いのは{2,5,7,8}である.

  • DP O(N*N), O(lonN)

  • DPO(N*N)方法

  • length[i]は、iインデックスに終了する最大インクリメンタル部分列の長さである.

  • 内部反復文を使用してk未満のインデックスを1つずつ表示し、arr[i]for (int k = 0; k < n; k++){ length[k] = 1; for (int i = 0; i < k; i++){ if(arr[i] < arr[k]){ length[k] = max(length[k], length[i] + 1); } } }