一句话理解
O(n²) LIS:两层循环。
为什么要学
n≤3000 可用。
讲解
枚举 i,再枚举前面的 j。
例子
for (int i = 1; i <= n; i++) {
f[i] = 1;
for (int j = 1; j < i; j++)
if (a[j] < a[i]) f[i] = max(f[i], f[j] + 1);
}
每个 i 看能接在哪个 j 后面。
常见错误
- n=1e5 用 n²。
- f[i] 没初始化 1。
第 331 课
O(n²) LIS:两层循环。
n≤3000 可用。
枚举 i,再枚举前面的 j。
for (int i = 1; i <= n; i++) {
f[i] = 1;
for (int j = 1; j < i; j++)
if (a[j] < a[i]) f[i] = max(f[i], f[j] + 1);
}
每个 i 看能接在哪个 j 后面。
朴素 LIS 是双重循环。
Ctrl / ⌘ + Enter 运行 · Tab 缩进
左右方向键也可翻课