trang chủ / bài tập / decree / lời giải

Sắc Lệnh Giáo Dục

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
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.
Tác giả: huunguyenhuunguyen

Hướng tiếp cận

Bài toán yêu cầu chọn d 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 d hoạt động bảo vệ, ta chọn b=kd 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 Bb phần tử sao cho i:AiBvi là nhỏ nhất.

Nhận xét quan trọng

  1. Biểu diễn bitmask: Với k20, 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ả 2k bitmask có thể được duyệt qua.

  2. Tổng trên tập con (Sum Over Subsets — SOS): Gọi f[mask] là tổng giá trị của tất cả học sinh có tập hoạt động đúng bằng mask. Ta cần tính g[mask]=smaskf[s] — tổng giá trị các học sinh mà tập hoạt động là tập con của mask.

  3. SOS DP: Phép biến đổi trên có thể tính trong O(k·2k) bằng kỹ thuật SOS DP (tương tự biến đổi Zeta trên poset tập con).

  4. Đáp án: Duyệt qua tất cả mask Bpopcount(B)=b=kd phần tử, tìm B cho g[B] nhỏ nhất. Kết quả là totalming[B].

Thuật toán

  1. Đọc input, tính f[mask] cho mỗi bitmask (gộp giá trị các học sinh có cùng tập hoạt động).

  2. 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, g[mask] chứa tổng f[s] với mọi smask.

  3. Duyệt tất cả mask B có đúng kd bit 1, tìm ming[B].

  4. In ra totalming[B].

Độ phức tạp

  • Thời gian: O(n+k·2k). Với k=20, ta có 20×2202×107 phép tính cho SOS DP, cộng thêm 220106 cho bước duyệt cuối.
  • Bộ nhớ: O(2k+n). Mảng fg có kích thước 2k.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0