Chia dãy thành đoạn

Đề bài

Mô tả

Cho dãy gồm n số nguyên không âm a1,a2,…,an.

Hãy chia dãy thành đúng k đoạn con liên tiếp không rỗng (mỗi phần tử thuộc đúng một đoạn, các đoạn phủ kín dãy). Với mỗi đoạn, chi phí của nó bằng bình phương tổng các phần tử trong đoạn.

Hãy tìm cách chia sao cho tổng chi phí của k đoạn là nhỏ nhất.

Dữ liệu vào

  • Dòng 1: hai số nguyên n và k.
  • Dòng 2: n số nguyên a1,a2,…,an.

Dữ liệu ra

In ra một số nguyên — tổng chi phí nhỏ nhất.

Ràng buộc

  • 1≤n≤105
  • 1≤k≤min(n,20)
  • 0≤ai≤104

Ví dụ

Input Output Giải thích
3 2
1 2 3
18 Chia [1][2,3] cho chi phí 12+52=26; chia [1,2][3] cho 32+32=18 — nhỏ nhất.
3 1
1 2 3
36 Chỉ một đoạn, chi phí (1+2+3)2=36.
2 2
4 4
32 Mỗi phần tử một đoạn: 42+42=32.

Ghi chú

Việc chia thành nhiều đoạn hơn luôn giúp giảm tổng bình phương, nhưng số đoạn bị cố định bằng k.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0