trang chủ / đề bài / knuthstone

Gộp đá chi phí nhỏ nhất

Đề bài

Mô tả

Cho N đống đá xếp thành một hàng. Đống thứ i chứa ai viên đá.

Bạn được phép thực hiện thao tác gộp như sau: chọn hai đống nằm kề nhau trong hàng rồi gộp chúng lại thành một đống mới (đống mới chiếm vị trí của hai đống cũ trong hàng, do đó số đống giảm đi 1). Chi phí của một thao tác gộp bằng tổng số đá của hai đống vừa được gộp.

Bạn cần lặp lại thao tác trên đúng N−1 lần để cuối cùng chỉ còn lại một đống duy nhất. Hãy tìm tổng chi phí nhỏ nhất có thể.

Dữ liệu vào

  • Dòng 1: số nguyên N.
  • Dòng 2: N số nguyên a1,a2,…,aN cách nhau bởi dấu cách.

Dữ liệu ra

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

Ràng buộc

  • 1≤N≤5000
  • 1≤ai≤104
  • Nếu N=1, kết quả là 0 (không cần gộp).
  • Đáp số có thể lên tới khoảng 2.5·1011, hãy dùng kiểu số nguyên 64-bit.

Ví dụ

Input Output Giải thích
4
4 1 1 4
18 Gộp hai đống giữa [1,1]→2 (chi phí 2). Hàng còn [4,2,4]. Gộp [4,2]→6 (chi phí 6). Hàng còn [6,4]. Gộp [6,4]→10 (chi phí 10). Tổng 2+6+10=18.
3
1 2 3
9 Gộp [1,2]→3 (chi phí 3), rồi gộp [3,3]→6 (chi phí 6). Tổng 3+6=9. (Cách gộp [2,3] trước cũng cho tổng 9.)

Ghi chú

Chú ý: chỉ được gộp hai đống đang kề nhau trong hàng tại thời điểm hiện tại. Việc gộp tham lam hai đống nhỏ nhất kiểu Huffman (không quan tâm vị trí) sẽ cho kết quả sai vì có thể chọn cặp không kề nhau.

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