trang chủ / đề bài / dhbb20_10_serv

Phục vụ

Đề bài

Mô tả

Một công ty cung cấp dịch vụ cho các đối tác của mình đặt tại n vùng khác nhau được đánh số 1,2,3,…,n. Công ty có 3 nhân viên phục vụ lưu động. Nếu xuất hiện một yêu cầu tại một địa điểm mà hiện đang không có nhân viên nào ở đó, một trong ba nhân viên di chuyển từ vị trí hiện tại của anh ta đến trực tiếp địa điểm xuất hiện yêu cầu mà không qua bất kỳ một địa điểm trung gian nào khác. Nếu đã có nhân viên ở địa điểm xuất hiện yêu cầu thì không ai di chuyển. Tại mọi thời điểm, chỉ có một nhân viên di chuyển. Các nhân viên chỉ di chuyển khi có yêu cầu phục vụ và không có hai nhân viên nào ở cùng một vị trí tại bất kỳ thời điểm nào. Chi phí để di chuyển từ vị trí i đến vị trí j là Cij. Chú ý rằng hàm chi phí không nhất thiết phải là đối xứng, tuy nhiên chi phí khi không di chuyển luôn bằng 0 (Cii=0). Các yêu cầu phải được thực hiện theo đúng thứ tự xuất hiện (yêu cầu xuất hiện trước phải được phục vụ trước, phục vụ xong một yêu cầu mới phục vụ yêu cầu tiếp theo).

Ban đầu ba nhân viên phục vụ đang ở các địa điểm 1, 2 và 3.

Yêu cầu: Hãy tìm lịch di chuyển các nhân viên phục vụ yêu cầu sao cho tổng chi phí là nhỏ nhất.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên dương n,m, lần lượt là số vùng khác nhau và số yêu cầu cần phục vụ (3≤n≤200, 1≤m≤1000).
  • n dòng tiếp theo, mỗi dòng chứa n số nguyên không âm có giá trị không vượt quá 2000. Số thứ j của dòng thứ i là giá trị của Cij, chi phí để đi từ i đến j.
  • Dòng cuối cùng chứa m số nguyên là danh sách các yêu cầu phục vụ theo thứ tự đăng ký. Mỗi yêu cầu được mô tả bằng một số nguyên là số hiệu địa điểm nơi yêu cầu xảy ra.

Dữ liệu ra

In ra một số nguyên S là tổng chi phí nhỏ nhất tìm được.

Ràng buộc

  • 3≤n≤200, 1≤m≤1000.
  • 0≤Cij≤2000, Cii=0.
  • Mỗi yêu cầu là một số nguyên trong đoạn [1,n].

Subtasks

  • Subtask 1 (35% số điểm): 3≤n,m≤8.
  • Subtask 2 (30% số điểm): n,m≤50.
  • Subtask 3 (35% số điểm): không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
5 9
0 1 1 1 1
1 0 2 3 2
1 1 0 4 1
2 1 5 0 1
4 2 3 4 0
4 2 4 1 5 4 3 2 1
5 Một phương án tối ưu là (1,2,1,2,2,1,3,1,3), ở đây số thứ i là số hiệu của nhân viên phục vụ yêu cầu thứ i.
5 3
0 0 100 100 100
100 0 100 0 0
100 100 0 100 100
100 100 100 0 100
100 100 100 100 0
2 5 4
100 Ví dụ bổ sung (không có trong đề gốc). Yêu cầu tại địa điểm 2 do nhân viên đang đứng ở đó phục vụ, nhân viên ở địa điểm 1 không được đến địa điểm 2. Nhân viên ở địa điểm 2 sang 5 (chi phí 0), sau đó phải có một nhân viên khác đến địa điểm 4 với chi phí 100. Không được đi 1→2→4 qua địa điểm trung gian.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0