Đây là câu hỏi từ một số cuộc thi lập trình (tôi không biết chính xác cuộc thi lập trình nào thuộc về, tôi đã xem nó một năm trước). Câu hỏi đặt ra là như sau:Tìm chiều cao chung của các tòa nhà với chi phí tối thiểu
Có N tòa nhà, từng có chiều cao của nó riêng (không nhất thiết phải độc đáo)
{h1,h2,h3,...,hn}
Chúng ta phải làm cho tất cả các tòa nhà của cùng một chiều cao nói h.
Các hoạt động cho phép là:
- Chúng ta có thể thêm một số chiều cao một tòa nhà.
- Chúng tôi có thể xóa một số chiều cao khỏi tòa nhà.
Có chi phí liên quan đến mỗi tòa nhà để xóa/thêm chiều cao đơn vị. Nói c (i) là chi phí để loại bỏ/thêm chiều cao đơn vị vào một tòa nhà. Chi phí tương ứng như sau:
{c1,c2,c3,...,cn}
Giả sử chúng tôi có đủ chiều cao (đơn vị), chúng tôi phải tìm chi phí tối thiểu để làm cho tất cả các tòa nhà có cùng độ cao.
Nhập: Dòng đầu tiên sẽ chỉ định N số lượng tòa nhà. (1 < = N < = 100000). Dòng thứ hai của đầu vào sẽ dành cho chiều cao của tòa nhà.
{h1,h2,h3,...,hn}
dòng thứ ba của đầu vào sẽ cung cấp cho các mảng chi phí
{c1,c2,c3.....,cn}
Output
Sản lượng sẽ chỉ đơn giản là chi phí tối thiểu cần thiết.
Sample Input:
3
2 1 3
10 1000 1
Sample Output
12
Giải thích: Làm cho tất cả các tòa nhà có chiều cao 1, vì vậy chi phí sẽ 10 * (2-1) + 1000 * (1-1) + 1 * (3-1) tức là 12.
Tôi biết phương pháp lực lượng vũ phu là O (n^2).
Phương pháp brute force tôi nghĩ là như sau:
Dù chiều cao h chung được, nó phải là từ
{h1,h2,h3,....,hn}
ví dụ: h phải bằng bất kỳ h (i). Bây giờ kiểm tra từng h (i) tôi có thể tính toán câu trả lời trong O (n^2).
có thể thực hiện nhanh hơn không?
kích thước của đầu vào là bao nhiêu? Bạn cũng nên xây dựng phương pháp 'O (n^2)' mà bạn nghĩ đến. Một đầu vào và đầu ra mẫu cũng sẽ cải thiện câu hỏi. – amit
@amit Đã chỉnh sửa câu hỏi. –
Đã chỉnh sửa giải pháp của tôi. Có một cái nhìn. Hy vọng nó giúp ! – user1599964