Nâng cao bài toán BUS2 NTUCoders

Link bài BUS2: http://ntucoder.net/Problem/Details/4486

Đề gốc

Đề gốc là “Điểm đặc biệt của đèn ở đây là khi đèn đỏ thì xe ở cả bốn hướng đều phải dừng lại chờ, khi đèn xanh thì xe ở bốn hướng đều được đi (thẳng, rẽ trái, rẽ phải đều được). Cứ sau mỗi 1 phút thì đèn sẽ chuyển từ xanh sang đỏ và ngược lại.”

Nhưng nếu thay đổi thời gian chờ đèn đỏ là 1p, chờ đèn xanh có thể lên 2-3p và khi có đèn xanh, xe chưa chắc đã đi, thì làm thế nào để tìm được đường ra khỏi tp nhanh nhất ạ?
Và giảm m, n: 2 <= m, n <= 50

Em đã thử quy hoạch động cho từng hàng, từng cột (Và chắc chắn là sai rồi :slight_smile: vì thay vì chờ rồi gặp đèn đỏ liên tục, có khi đi vòng nhanh hơn mà)

Sau đó, em xét cái hàng đợi queue, ban đầu cho {1, 1, 0} (lần lượt là i, j, time), sau đó xét 5 cạnh kề (vị trí đó và 4 điểm chung cạnh) rồi cứ BFS loang đi hết, và chạy quá thời gian trong khi 2 <= m, n <= 50 thôi.

bài này theo mình nghĩ là vẫn dùng quy hoạch động, tuy nhiên với công thức truy hồi có chút biến tấu

  1. để ý kĩ thì chi phí để đi từ ngã tư này đến ngã tư kế bên luôn luôn là nhỏ nhất, không thể nào có đường vòng mà ngắn hơn
  2. như vậy thì đường đi tối ưu vẫn sẽ là đi sang phải hoặc đi xuống (theo như hình cho dễ tưởng tượng)

từ đó, ra có chi phí đi tới ngã tư
cost[x,y] = min(goDown, goRight)
với
goDown = cost[x-1, y] + thời gian chờ đèn + 1p
goRight = cost[x, y-1] + thời gian chờ đèn + 1p

à, tới đây mới có vấn đề để bàn
thời gian chờ đèn là hên xui, ví dụ đèn switch mỗi 5p, thì có thể tới đó chờ 0, 1, 2, 3, 4, 5
vậy làm sao biết?
tất nhiên là tính toán, việc tính toán khá đơn giản, bạn đã biết thời gian để bạn đến được ngã tư A, bạn biết thời gian swtich của ngã tư A, vậy là tính được rồi

ví dụ đèn swtch 5p, bạn đến được ngã tư A đó sau 28p, như vậy 5(x) + 5(đ) + 5(x) + 5(đ) + 5(x) + 5(đ)
bạn bị lọt vào 5p đèn đỏ, như vây phải chờ đủ 30p => thời gian chờ để được đi là 2p

3 Likes

Bài này dùng Dijkstra cũng được, xử lý thêm một chút chỗ đèn giữ nguyên hay đổi màu là AC.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?