Dãy con phân biệt
Đề bài
Mô tả
Một dãy con của xâu là xâu thu được bằng cách xóa đi một số (có thể không) kí tự khỏi xâu ban đầu mà không thay đổi thứ tự các kí tự còn lại. Ví dụ, với xâu "abaca" thì "abaca", "aba", "aaa", "a" và "" (xâu rỗng) đều là dãy con, còn "aabaca", "cb", "bcaa" thì không.
Cho một xâu gồm chữ cái Latin thường. Ta cần xây dựng một tập hợp các dãy con phân biệt của .
Mỗi thao tác: chọn một dãy con của rồi thêm vào . Tập không được chứa phần tử trùng lặp (mỗi dãy con chỉ có thể xuất hiện tối đa một lần trong ). Chi phí của thao tác này bằng , tức số kí tự đã bị xóa để tạo ra .
Hãy tìm tổng chi phí nhỏ nhất để thu được tập có đúng phần tử, hoặc thông báo rằng điều đó là bất khả thi.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và : độ dài xâu và kích thước tập cần đạt.
- Dòng thứ hai chứa xâu gồm chữ cái Latin thường.
Dữ liệu ra
In ra một số nguyên: tổng chi phí nhỏ nhất để thu được tập có đúng phần tử. Nếu không thể, in ra .
Ràng buộc
- gồm chữ cái Latin thường.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 5 asdf |
4 | Có thể chọn "asdf", "asd", "adf", "asf", "sdf" . Chi phí phần tử đầu là , bốn phần tử còn lại mỗi cái là , tổng bằng . |
| 5 6 aaaaa |
15 | Các dãy con phân biệt chỉ là "aaaaa", "aaaa", "aaa", "aa", "a", "" (mỗi độ dài đúng một dãy). Lấy cả dãy với chi phí . |
| 5 7 aaaaa |
-1 | Chỉ có dãy con phân biệt, không thể đạt tập kích thước . |
| 10 100 ajihiushda |
233 | Chọn tham lam các dãy con dài nhất trước để tối thiểu tổng chi phí. |
Bình luận