trang chủ / bài tập / hillhouse

Xây nhà trên đồi

Đề bài

Mô tả

Thành phố có một dãy n ngọn đồi xếp thành hàng ngang, ngọn đồi thứ i có độ cao ai.

Người ta muốn xây nhà trên các ngọn đồi. Vì lý do thẩm mỹ, một ngôi nhà chỉ được xây trên ngọn đồi cao hơn hẳn (lớn hơn thực sự) mọi ngọn đồi kề nó. Đồi thứ 1 chỉ có một đồi kề là đồi thứ 2, đồi thứ n chỉ có một đồi kề là đồi thứ n1; các đồi còn lại có hai đồi kề. Ví dụ với dãy độ cao 5,4,6,2 thì chỉ có thể xây nhà trên hai ngọn đồi có độ cao 56.

Thành phố có một chiếc máy xúc. Trong một giờ, máy xúc làm giảm độ cao của đúng một ngọn đồi đi 1 đơn vị. Máy chỉ làm việc trên một ngọn đồi tại một thời điểm. Độ cao được phép giảm xuống 0 hoặc xuống giá trị âm. Không có cách nào làm tăng độ cao của một ngọn đồi.

Chính quyền muốn xây k ngôi nhà, tức là sau khi san đồi phải có ít nhất k ngọn đồi thoả điều kiện ở trên. Vì giá trị k chưa được chốt, hãy tính đáp án cho mọi k từ 1 đến n/2: với mỗi k, cho biết số giờ ít nhất cần dùng máy xúc.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n là số ngọn đồi.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an là độ cao các ngọn đồi.

Dữ liệu ra

In ra đúng n/2 số nguyên cách nhau bởi dấu cách. Số thứ k là số giờ ít nhất cần thiết để có thể xây được k ngôi nhà.

Ràng buộc

  • 1n5000
  • 1ai100000

Ví dụ

Input Output Giải thích
5
1 1 1 1 1
1 2 2 Với k=1: giảm đồi 2 đi 1, dãy thành 1,0,1,1,1, đồi 1 trở thành đỉnh. Với k=2k=3: giảm đồi 2 và đồi 4, dãy thành 1,0,1,0,1, khi đó cả ba đồi 1,3,5 đều là đỉnh nên cùng một chi phí 2 giờ đáp ứng được cả k=2 lẫn k=3.
3
1 2 3
0 2 Với k=1: đồi 3 đã cao hơn đồi 2 nên không tốn giờ nào. Với k=2: hai đỉnh không thể kề nhau nên phải chọn đồi 1 và đồi 3, cần hạ đồi 2 từ 2 xuống 0, mất 2 giờ.
5
1 2 3 2 2
0 1 3 k=1: đồi 3 sẵn là đỉnh. k=2: chọn đồi 3 và đồi 5, hạ đồi 4 từ 2 xuống 1, mất 1 giờ. k=3: chọn đồi 1,3,5, cần hạ đồi 2 xuống 0 (mất 2 giờ) và đồi 4 xuống 1 (mất 1 giờ), tổng 3 giờ.

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.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0