直接 DP 為 O(k n²),n ≤ 5000 可接受;n ≤ 10⁵ 需優化。
觀察 `cost(l, r)` 滿足**四邊形不等式**與**單調性**,可用 **分治 DP** 將單層優化至 O(n log n),總複雜度 O(k n log n)。
void compute(int j, int l, int r, int optL, int optR) {
if (l > r) return;
int mid = (l + r) >> 1;
pair<long, int> best = {INF, -1};
for (int t = optL; t <= min(mid-1, optR); ++t) {
long val = dp[t][j-1] + cost(t+1, mid);
if (val < best.first) best = {val, t};
}
dp[mid][j] = best.first;
int opt = best.second;
compute(j, l, mid-1, optL, opt);
compute(j, mid+1, r, opt, optR);
}
// 呼叫
for (int j = 2; j <= k; ++j)
compute(j, 1, n, 1, n);
需預處理 `max(y)` 區間查詢(稀疏表 O(1) 或線段樹 O(log n))。
每點可單獨用一個寬度 0 的矩形(垂直線),總面積 = 0。若題目要求矩形寬度 > 0,則至少需相鄰點合併。
原最佳回答的貪婪「取前 k-1 點」在一般情況**不正確**,僅在 y 單調或特定分布下成立。嚴謹解需 DP。