Phân đoạn mảng tối ưu

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2000 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho một mảng \(A\) gồm \(N\) số nguyên dương \(A_1, A_2, \dots, A_N\) cùng hai số nguyên \(K\) và \(C\).

Cần chia mảng \(A\) thành đúng \(K\) đoạn con liên tiếp không rỗng \(S_1, S_2, \dots, S_K\).
Chi phí của một đoạn con \(S = [A_l, A_{l+1}, \dots, A_r]\) được tính bằng:

\[\text{cost}(l, r) = \left(\sum_{i=l}^r A_i\right)^2 + C\]

Tổng chi phí của cách phân đoạn là tổng chi phí của \(K\) đoạn con đó. Hãy tìm cách chia mảng thành \(K\) đoạn sao cho tổng chi phí là nhỏ nhất.

Input

  • Dòng đầu tiên chứa ba số nguyên \(N, K, C\) (\(1 \le K \le N \le 10^5\), \(1 \le K \le 100\), \(0 \le C \le 10^9\)).
  • Dòng thứ hai chứa \(N\) số nguyên dương \(A_1, A_2, \dots, A_N\) (\(1 \le A_i \le 10^4\)).

Output

  • In ra một số nguyên duy nhất là tổng chi phí nhỏ nhất tìm được.

Example

Test 1

Input
4 2 5
2 3 1 4
Output
60
Note

Chia mảng thành 2 đoạn: \([2, 3]\) và \([1, 4]\).
Chi phí đoạn 1: \((2 + 3)^2 + 5 = 25 + 5 = 30\).
Chi phí đoạn 2: \((1 + 4)^2 + 5 = 25 + 5 = 30\).
Tổng chi phí = \(30 + 30 = 60\).

Scoring

  • Subtask 1 (100 điểm): \(1 \le K \le 100\), \(1 \le N \le 10^5\), \(0 \le C \le 10^9\), \(1 \le A_i \le 10^4\).

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.