II. Vấn đề công thức truy hồ
3.Bài toán ″Quầy bán hàng ″:
Một siêu thị có M gian hàng, mỗi gian hàng gồm N ngăn chứa, mỗi ngăn chứa được bố trí ở mỗi phòng. Giám đốc siêu thị quyết định mở một đợt khuyến mãi cho khách hàng với các quy tắc sau:
Mỗi gian hàng được bố trí trên từng tấng tương ứng từ tầng 1 đến M. Mỗi tầng có N thang máy đi lên ứng với mỗi phòng.
Một khách hàng có thể mua sản phẩm tại một gian hàng nhưng chỉ có thể đi theo một hướng (không được mua xong rồi quay trở lại nơi đã mua).
Khách hàng có thể đi thang máy lên tầng tiếp theo, nhưng phải mua ít nhất tại một ngăn chứa ở tầng đó thì mới được phép đi lên tầng trên nữa.
Khách hàng mua hàng tại một ngăn chứa. Mỗi ngăn chứa quy định một số lượng hàng mà người khách buộc phải mua khi đến ngăn chứa đó.
Nếu độ chênh số lượng hàng giữa hai ngăn chứa liên tiếp của một khách hàng là một số may mắn đã biết trước. Khách hàng đó sẽ được khuyến mãi thêm một số hàng bằng chính số may mắn đó.
Đến tầng thứ M, khách hàng chỉ có thể mua hàng tại duy nhất một ngăn chứa. Hãy giúp khách hàng lựa chọn điểm xuất phát và hướng đi sao cho mua được nhiều hàng nhất (Kể cả số hàng được khuyến mãi).
Dữ liệu đầu vào cho trong FILE văn bản SHOP.INP có cấu trúc như sau: Dòng đầu là 3 số M, N, K (1<M, N, K ≤100), K là số các con số may mắn. Dòng thứ hai ghi K con số may mắn.
M dòng tiếp theo ghi số lượng hàng quy định tại mỗi ngăn chứa. Mỗi dòng gồm N số cách nhau bởi ít nhất một dấu trắng.
Kết quả ghi ra FILE văn bản SHOP.OUT như sau: Dòng một là số lượng hàng nhiều nhất.
- Dòng hai điểm xuất phát và quá trình mua hàng. Mỗi ngăn chứa đi qua được biểu diễn theo dạng ″(x,y) ″ trong đó (x,y) là vị trí của ngăn chứa.
SHOP.INP SHOP.OUT
80 (Lượng hàng mua được Max)
(1,3) (1,2) (2,2) (2,1) (3,1) (3,2) (3,3) (3,4) (4,4)
Thuật giải:
Bước 0: Bỏ qua.
Bước 1: Trọng số ở đây là số lượng hàng tại các ngăn chứa. Đồng thời khi thoả mãn điều kiện ″khuyến mãi ″ thì trọng số sẽ được tăng thêm số lượng bằng số các con số may mắn (phụ thuộc vào ô đứng trước).
Bước 2: Quy tắc đi Bước 3: Công thức
B[i,j] là lượng hàng max khi đi từ tầng 1 cho đến ngăn chứa (i,j) B[0,j]= 0 với j =1..N
B[i,0] = 0 với i =1..M
B[i,j] = Max{B[i,j-1]+KM1, B[i-1,j] + KM2, B[i-1,k]+ SA[i,u]+KM3}+A[i,j]
Với i =1..M , j =1..(N-1) , k =(j+1)..M , u = j+1..k
KM1 là lượng hàng khuyến mãi nếu Abs(A[i,j]-A[i,j-1]) là con số may mắn. KM2 là lượng hàng khuyến mãi nếu Abs(A[i,j]-A[I 1,j]) là con số may mắn. KM3 là tổng số lượng hàng khuyến mãi nếu
Abs(A[i,k]-A[i-1,k]) và Abs(A[i,t]-A[i,t+1]) với t = j..(u-1) là các con số may mắn.
B[i,N] = Max{B[i,N-1]+KM1,B[i-1,N]+KM2}+A[i,N] Với i =1..M
KM1 là lượng hàng khuyến mãi nếu abs(A[i,N]-A[i,N 1]) là con số may mắn. KM2 là lượng hàng khuyến mãi nếu abs(A[i,N]-A[I 1,N]) là con số may mắn.