Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng tiếp cận
Ta cần tìm cặp chỉ số với sao cho lớn nhất. Cách "brute" duyệt mọi cặp tốn , không khả thi khi tới và tổng tới .
Quan sát: khi ta cố định ngày bán , lợi nhuận tối ưu sẽ đạt được khi là giá nhỏ nhất trong tiền tố . Vì vậy chỉ cần duy trì giá nhỏ nhất tiền tố () là đủ.
Nhận xét quan trọng
- Điều kiện là mấu chốt. Nếu bỏ qua điều kiện này, ta sẽ ra , có thể sai khi xảy ra trước .
- Khi mọi lợi nhuận đều âm/không, đáp án là (không giao dịch), không phải số âm.
- Có thể chọn cho lợi nhuận , nên đáp án luôn .
Thuật toán
Khởi tạo , . Duyệt từ đến :
- Cập nhật .
- Cập nhật .
Lưu ý thứ tự: phải tính trước (dùng của tiền tố ), rồi mới cập nhật với (cho lần sau). Nếu cập nhật trước thì cũng đúng vì không làm xấu kết quả, nhưng cách viết "tính trước, cập nhật sau" rõ ràng hơn.
In ra .
Độ phức tạp
- Thời gian: cho mỗi test, tổng — tối đa phép cộng/so sánh.
- Bộ nhớ: để đọc dãy (hoặc nếu đọc và xử lý online).
Bình luận