Tôi đã hỏi câu hỏi này trên Stack Overflow trước đây: Vấn đề: Việc bán hàng của Bob . Có người đề nghị đăng câu hỏi ở đây là tốt.
Ai đó đã hỏi một câu hỏi liên quan đến vấn đề này ở đây - Trọng lượng tối thiểu của phần tử nhất định - nhưng theo tôi hiểu thì nó không giúp tôi giải quyết vấn đề của mình. Câu trả lời được đánh giá cao nhất trên StackOverflow cũng đáng để xem xét.
Đây là bản sao nguyên văn của câu hỏi StackOverflow của tôi. Có lẽ nó được xây dựng không đầy đủ cho trang web này (quái gì, tôi cảm thấy không được giáo dục đầy đủ chỉ cần hỏi nó ở đây), vì vậy hãy thoải mái chỉnh sửa nó:
Lưu ý: đây là một bản viết lại trừu tượng về một vấn đề thực tế liên quan đến việc sắp xếp các bản ghi trong tệp SWF. Một giải pháp sẽ giúp tôi cải thiện một ứng dụng nguồn mở.
Bob có một cửa hàng, và muốn bán hàng. Cửa hàng của anh ấy mang một số sản phẩm, và anh ấy có một số lượng đơn vị nhất định của mỗi sản phẩm trong kho. Ông cũng có một số nhãn giá gắn trên kệ (nhiều như số lượng sản phẩm), với giá đã được in trên chúng. Anh ta có thể đặt bất kỳ nhãn giá nào trên bất kỳ sản phẩm nào (giá đơn nhất cho một mặt hàng cho toàn bộ kho sản phẩm đó), tuy nhiên một số sản phẩm có một hạn chế bổ sung - bất kỳ sản phẩm nào như vậy có thể không rẻ hơn một sản phẩm khác.
Bạn phải tìm cách sắp xếp các nhãn giá, sao cho tổng chi phí của tất cả các sản phẩm của Bob càng thấp càng tốt. Tổng chi phí là tổng của nhãn giá được chỉ định của mỗi sản phẩm nhân với số lượng sản phẩm đó trong kho.
Được:
- N - số lượng sản phẩm và nhãn giá
- S i , 0≤ i <N - số lượng tồn kho của sản phẩm có chỉ số i (số nguyên)
- P j , 0≤ j <N - giá trên nhãn giá với chỉ số j (số nguyên)
- K - số lượng các cặp ràng buộc bổ sung
- A k , B k , 0≤ k <K - chỉ số sản phẩm cho các ràng buộc bổ sung
- Bất kỳ chỉ số sản phẩm nào cũng có thể xuất hiện nhiều nhất một lần trong B. Do đó, biểu đồ được hình thành bởi danh sách kề này thực sự là một tập hợp các cây được định hướng.
Chương trình phải tìm:
- M i , 0≤ i <N - ánh xạ từ chỉ mục sản phẩm sang chỉ số nhãn giá (P M i là giá của sản phẩm i )
Để thỏa mãn điều kiện:
- P M A k P M B k , với 0≤ k <K
- (S i × P M i ) cho 0≤ i <N là tối thiểu
Lưu ý rằng nếu không phải là điều kiện đầu tiên, giải pháp sẽ chỉ đơn giản là sắp xếp nhãn theo giá và sản phẩm theo số lượng và khớp trực tiếp cả hai.
Các giá trị tiêu biểu cho đầu vào sẽ là N, K <10000. Trong bài toán thực tế, chỉ có một số thẻ giá riêng biệt (1,2,3,4).
Đây là một ví dụ về lý do tại sao hầu hết các giải pháp đơn giản (bao gồm sắp xếp theo cấu trúc liên kết) sẽ không hoạt động:
Bạn có 10 mặt hàng với số lượng từ 1 đến 10 và 10 nhãn giá với giá 1 đến 10. Có một điều kiện: mặt hàng có số lượng 10 không được rẻ hơn mặt hàng có số lượng 1.
Giải pháp tối ưu là:
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2
với tổng chi phí là 249. Nếu bạn đặt cặp 1,10 gần cực trị, tổng chi phí sẽ cao hơn.