Hướng dẫn giải của Sắc Lệnh Giáo Dục
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng tiếp cận
Bài toán yêu cầu chọn hoạt động để bảo vệ nhằm tối đa hóa tổng giá trị học sinh an toàn. Ta đổi góc nhìn: thay vì chọn hoạt động bảo vệ, ta chọn hoạt động bị cấm, và tối thiểu hóa tổng giá trị học sinh bị đình chỉ.
Một học sinh bị đình chỉ khi và chỉ khi tập hoạt động của họ là tập con của tập bị cấm. Bài toán trở thành: chọn tập có phần tử sao cho là nhỏ nhất.
Nhận xét quan trọng
Biểu diễn bitmask: Với , mỗi tập hoạt động có thể biểu diễn bằng một bitmask. Tập hợp tất cả bitmask có thể được duyệt qua.
Tổng trên tập con (Sum Over Subsets — SOS): Gọi là tổng giá trị của tất cả học sinh có tập hoạt động đúng bằng . Ta cần tính — tổng giá trị các học sinh mà tập hoạt động là tập con của .
SOS DP: Phép biến đổi trên có thể tính trong bằng kỹ thuật SOS DP (tương tự biến đổi Zeta trên poset tập con).
Đáp án: Duyệt qua tất cả mask có phần tử, tìm cho nhỏ nhất. Kết quả là .
Thuật toán
Đọc input, tính cho mỗi bitmask (gộp giá trị các học sinh có cùng tập hoạt động).
Tính SOS DP:
g = copy of f for bit = 0 to k-1: for mask = 0 to 2^k - 1: if mask has bit set: g[mask] += g[mask XOR (1 << bit)]Sau bước này, chứa tổng với mọi .
Duyệt tất cả mask có đúng bit 1, tìm .
In ra .
Độ phức tạp
- Thời gian: . Với , ta có phép tính cho SOS DP, cộng thêm cho bước duyệt cuối.
- Bộ nhớ: . Mảng và có kích thước .
Bình luận