Tôi cần một số trợ giúp về vấn đề ACPC ICPC này. Ý tưởng hiện tại của tôi là mô hình hóa điều này như một vấn đề đường đi ngắn nhất, được mô tả theo tuyên bố vấn đề.
Vấn đề
Có N = 1000
các thùng chứa chất thải hạt nhân nằm dọc theo một dãy số 1-D tại các vị trí khác nhau-500,000 to 500,000
, ngoại trừ x=0
. Một người có nhiệm vụ thu thập tất cả các thùng rác. Mỗi giây mà một thùng chứa chất thải không được thu gom, nó sẽ phát ra 1 đơn vị bức xạ. Người bắt đầu tại x = 0
và có thể di chuyển 1
đơn vị mỗi giây và việc thu gom chất thải mất một lượng thời gian không đáng kể. Chúng tôi muốn tìm lượng phóng xạ tối thiểu được giải phóng trong khi thu thập tất cả các thùng chứa.
Đầu vào mẫu:
4
Container nằm ở [-12, -2, 3, 7]
.
Thứ tự tốt nhất để thu thập các container này là [-2, 3, 7, -12]
, cho các 50
đơn vị phát ra tối thiểu . Giải thích: người đó đi -2
trong 2 giây và trong thời gian đó 2 units
bức xạ được phát ra. Sau đó, anh ta đi đến 3
(khoảng cách 5
:) để thùng đã giải phóng 2 + 5 = 7
các đơn vị phóng xạ. Anh ta mất 4
nhiều giây hơn để đến x = 7
nơi cái thùng đó đã phát ra 2 + 5 + 4 = 11
các đơn vị. Anh ta mất 19
vài giây để đến x = -12
nơi cái thùng đó đã phát ra 2 + 5 + 4 + 19 = 30
các đơn vị. 2 + 7 + 11 + 30 = 50
, đó là câu trả lời.
Ghi chú
Có một O(N!)
giải pháp rõ ràng . Tuy nhiên, tôi đã khám phá các phương pháp tham lam như di chuyển đến phương pháp gần nhất hoặc di chuyển đến cụm gần nhất nhưng chúng không hoạt động.
Tôi đã suy nghĩ về vấn đề này khá lâu và đã mô hình hóa nó như một vấn đề tìm kiếm đồ thị:
- Chúng tôi chèn
0
vào như một vị trí cơ sở (Đây sẽ là trạng thái ban đầu) - Sau đó, chúng tôi sắp xếp các vị trí từ ít nhất đến lớn nhất.
- Sau đó chúng tôi thực hiện BFS / PFS, trong đó
state
bao gồm- Hai số nguyên
l
vàr
đại diện cho một phạm vi liền kề trong mảng vị trí được sắp xếp mà chúng tôi đã truy cập - Một số nguyên
loc
cho chúng ta biết chúng ta ở điểm cuối bên trái hay bên phải của phạm vi - Một số nguyên
time
cho chúng ta biết thời gian đã trôi qua - Một số nguyên 'chi phí' cho chúng ta biết tổng chi phí cho đến nay (dựa trên các nút chúng tôi đã truy cập)
- Hai số nguyên
- Từ mỗi trạng thái, chúng ta có thể di chuyển đến [l - 1, r] và [l, r + 1], điều chỉnh 3 số nguyên khác cho phù hợp
- Trạng thái cuối cùng là [0, N], kiểm tra cả hai vị trí kết thúc.
Tuy nhiên, dường như [L, R, loc]
không xác định duy nhất một trạng thái và chúng tôi phải lưu trữ L, R, loc, and time
, trong khi giảm thiểu cost
ở mỗi trạng thái này. Điều này dẫn đến một thuật toán theo cấp số nhân, vẫn còn quá chậm đối với bất kỳ hàng hóa nào.
Bất cứ ai có thể giúp tôi mở rộng ý tưởng của tôi hoặc đẩy tôi đi đúng hướng?
Chỉnh sửa: Có lẽ điều này có thể được mô hình hóa như một vấn đề tối ưu hóa lập trình động? Nghĩ về nó, nó có cùng một vấn đề với giải pháp tìm kiếm đồ thị - chỉ vì dòng điện cost
thấp không có nghĩa đó là câu trả lời tối ưu cho vấn đề phụ đó, vì nó time
cũng ảnh hưởng rất lớn đến câu trả lời.
Tham lam không hoạt động: Tôi có một thuật toán lựa chọn tham lam ước tính chi phí di chuyển đến một nơi nhất định (ví dụ: nếu chúng ta di chuyển sang phải, chúng ta sẽ nhân đôi khoảng cách đến các thùng bên trái và như vậy).
Bạn có thể thực hiện tìm kiếm ưu tiên đầu tiên, với một heuristic? Các heuristic có thể kết hợp chi phí của chuyến đi hiện tại với thời gian trôi qua.