NKTICK - Xếp hàng mua vé

Tags: dp

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

NKTICK.cpp