Bỏ qua đến nội dung

Hướng giải: Phân chia dãy số

Phân chia dãy số

Mã bài: binarysearch09 Nhóm: Uncategorized Điểm: 100 điểm
Giới hạn
1,0 s, 256 MB
Tỉ lệ AC
23,7%
Người giải
8
Chỉ đọc hướng giải khi bế tắc và đừng sao chép mã trong đó. Hãy tôn trọng người ra đề và người viết hướng giải: nộp lời giải chính thức khi chưa tự giải được bài có thể khiến bạn bị khóa tài khoản.

Nguồn: CSES

Xây dựng một hàm check(s) nhận vào một giá trị s và kiểm tra xem có thể chia mảng thành k mảng con sao cho tổng của mỗi mảng con không vượt quá s hay không. Hàm duyệt mảng từ trái sang phải và tham lam chọn kích thước lớn nhất có thể cho mỗi mảng con.

Ta có thể giải bài toán một cách hiệu quả bằng cách kết hợp tìm kiếm nhị phân với hàm trên. Ta tìm giá trị lớn nhất s sao cho không thể chia mảng thành các mảng con thỏa mãn điều kiện. Khi đó, đáp án của bài toán là s + 1.

Thuật toán có độ phức tạp O(n.log(M)), trong đó M=10^{18} là đáp án lớn nhất có thể.

Bình luận