LIS(arr)
begin
dp[i] ← 1 ∀i // each element is LIS of 1
for i ← 1 to n-1 do
for j ← 0 to i-1 do
if arr[j] < arr[i] and dp[j]+1 > dp[i]
dp[i] ← dp[j] + 1
parent[i] ← j
return max(dp), backtrack
end