Hướng dẫn giải của 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.
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.
Lời giải: Chia Đội Cân Bằng
Hướng tiếp cận
Vì chỉ có 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
- Số hoán vị của nhãn đội là . Con số này rất nhỏ.
- Dùng
next_permutationtrê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). - 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):
- Tạo mảng nhãn .
- Duyệt tất cả hoán vị duy nhất.
- 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:
- Sắp xếp kỹ năng giảm dần.
- Gán lần lượt từng người vào một trong đội (mỗi đội tối đa người).
- 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:
- Bộ nhớ:
Bình luận