Sắp xếp nhân sự

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1600 (p) Thời gian: 2.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Một công ty có \(n\) nhân viên được chia thành \(m\) nhóm. Với mỗi nhân viên, giám đốc công ty biết nhóm và lương của nhân viên đó. Giám đốc muốn lựa chọn trưởng nhóm cho từng nhóm thỏa mãn điều kiện:

  • Mỗi nhóm lựa chọn đúng một người và phân công người đó làm trưởng nhóm một nhóm nào đó (thậm chí chính nhóm hiện tại);
  • Mỗi nhóm có đúng một trưởng nhóm;
  • Trong mỗi nhóm, tổng số tiền lương của những người còn lại trong nhóm không được nhiều hơn tiền lương của người trưởng nhóm.

Yêu cầu: Tìm cách lựa chọn các trưởng nhóm và phân vào các nhóm thỏa mãn yêu cầu trên sao cho tổng tiền lương của các trưởng nhóm là nhỏ nhất.

Input

  • Dòng đầu tiên chứa hai số nguyên \(m, n\) (\(m \le \min(15, n)\)).
  • Tiếp theo là \(m\) dòng, mỗi dòng mô tả một nhóm có định dạng: số đầu tiên là số \(s\) (số người trong nhóm đó), tiếp theo là \(s\) số nguyên là lương của từng người trong nhóm. Các số nguyên dương không vượt quá \(10^9\).

Output

  • Gồm một dòng duy nhất chứa một số nguyên là tổng tiền lương nhỏ nhất của các trưởng nhóm. Nếu không có phương án thỏa mãn, ghi \(-1\).

Example

Test 1

Input
3 7
3 1 2 3
2 3 2
3 1 2 2
Output
8

Scoring

  • Subtask \(1\) (\(50\%\) số điểm): \(n \le 15\).
  • Subtask \(2\) (\(50\%\) số điểm): \(n \le 50\).

Nguồn: 3D'21

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.