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 s gồm n chữ cái Latin thường. Ta cần xây dựng một tập hợp S các dãy con phân biệt của s.

Mỗi thao tác: chọn một dãy con t của s rồi thêm t vào S. Tập S 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 S). Chi phí của thao tác này bằng n|t|, tức số kí tự đã bị xóa để tạo ra t.

Hãy tìm tổng chi phí nhỏ nhất để thu được tập S có đúng k 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 nk: độ dài xâu và kích thước tập cần đạt.
  • Dòng thứ hai chứa xâu s gồm n 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 S có đúng k phần tử. Nếu không thể, in ra 1.

Ràng buộc

  • 1n100
  • 1k1012
  • s gồm n chữ cái Latin thường.

Ví dụ

Input Output Giải thích
4 5
asdf
4 Có thể chọn S={ "asdf", "asd", "adf", "asf", "sdf" }. Chi phí phần tử đầu là 0, bốn phần tử còn lại mỗi cái là 1, tổng bằng 4.
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ả 6 dãy với chi phí 0+1+2+3+4+5=15.
5 7
aaaaa
-1 Chỉ có 6 dãy con phân biệt, không thể đạt tập kích thước 7.
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

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