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

Chia Đội Cân Bằng

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

Lời giải: Chia Đội Cân Bằng

Hướng tiếp cận

Vì chỉ có 12 người, số cách phân chia hợp lệ nhỏ — có thể duyệt toàn bộ.

Nhận xét quan trọng

  1. Số hoán vị của nhãn đội {0,0,0,1,1,1,2,2,2,3,3,3}12!(3!)4=369600. Con số này rất nhỏ.
  2. Dùng next_permutation trên mảng nhãn để duyệt tất cả cách gán người vào đội một cách hiệu quả (tự bỏ qua trùng lặp).
  3. Có thể tối ưu thêm bằng backtracking với cắt tỉa: nếu hai đội có cùng số người và tổng điểm, chúng là hoán đổi được — bỏ qua.

Thuật toán

Cách 1 — next_permutation (đơn giản):

  1. Tạo mảng nhãn [0,0,0,1,1,1,2,2,2,3,3,3].
  2. Duyệt tất cả hoán vị duy nhất.
  3. Với mỗi hoán vị, tính tổng từng đội và cập nhật đáp án.

Cách 2 — Backtracking với cắt tỉa:

  1. Sắp xếp kỹ năng giảm dần.
  2. Gán lần lượt từng người vào một trong 4 đội (mỗi đội tối đa 3 người).
  3. Cắt tỉa: không gán vào đội có cùng trạng thái với đội đã xét trước đó.

Độ phức tạp

  • Thời gian: O(12!(3!)4)=O(369600)
  • Bộ nhớ: O(1)

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