Problem
https://vn.spoj.com/problems/NKTICK
https://oj.vnoi.info/problem/NKTICK
Có N người sắp hàng mua vé dự buổi hoà nhạc. Ta đánh số họ từ 1 đến N theo thứ tự đứng trong hàng. Mỗi người cần mua một vé, song người bán vé được phép bán cho mỗi người tối đa hai vé. Vì thế, một số người có thể rời hàng và nhờ người đứng trước mình mua hộ vé. Biết ti là thời gian cần thiết để người i mua xong vé cho mình. Nếu người i+1 rời khỏi hàng và nhờ người i mua hộ vé thì thời gian để người thứ i mua được vé cho cả hai người là ri.
Yêu cầu: Xác định xem những người nào cần rời khỏi hàng và nhờ người đứng trước mua hộ vé để tổng thời gian phục vụ bán vé là nhỏ nhất.
Dữ liệu
- Dòng đầu tiên chứa số N (1 ≤ N ≤ 60000).
- Dòng thứ 2 ghi N số nguyên dương t1, t2, …, tN. (1 ≤ ti ≤ 30000)
- Dòng thứ ba ghi N-1 số nguyên dương r1, r2, …, rN-1. (1 ≤ ri ≤ 30000)
Kết qủa
In ra tổng thời gian phục vụ nhỏ nhất.
Ví dụ
**Dữ liệu:**
5
2 5 7 8 4
4 9 10 10
**Kết qủa**
18
**Dữ liệu:**
4
5 7 8 4
50 50 50
**Kết qủa**
24
Tutorial
Gọi F[i][0]
là thời gian nhỏ nhất khi đến người thứ i và người i nhờ i-1 mua hộ, F[i][1]
là thời gian nhỏ nhất khi đến người thứ i và người này tự mua
Dễ thấy F[i][0] = F[i-1][1] – t[i-1] + r[i-1]
F[i][1] = min(F[i-1][0], F[i-1][1]) + t[i]
Cơ sở QHĐ : F[1][0] = inf; F[1][1] = t[1]
;
F[2][0] = r[1]; F[2][1] = t[1] + t[2]
;
Submission
Nếu bạn thấy bài viết này hay, hãy share bài viết này cho mọi người nhé 😉.
Share this post →