Cắt dãy số (Chọn ĐT'24-25)

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: 2100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: catdayso.inp Output: catdayso.out

Cho một xâu \(S\) có độ dài \(n\) chỉ gồm các ký tự số. Hãy tìm cách cắt xâu \(S\) thành các đoạn liên tiếp nhau khác rỗng để tạo thành một dãy số (trong đó mỗi đoạn con tương ứng một số và số này có thể chứa số 0 ở đầu) sao cho độ dài của dãy con không giảm của dãy số đó là lớn nhất.

  • Đoạn con liên tiếp là đoạn con thu được bằng cách xoá đi một số phần tử ở đầu và cuối xâu (có thể là không xoá phần tử nào).
  • Dãy con tăng không giảm có độ dài lớn nhất là khi ta xoá đi một số phần tử của dãy ban đầu thì phần thu được sẽ là một dãy không giảm và có độ dài lớn nhất.

Input

  • Dòng đầu chứa số nguyên dương \(n\) (\(1 \le n \le 2 \cdot 10^3\)).
  • Dòng tiếp theo chứa xâu \(S\) gồm \(n\) kí tự.

Output

  • Ghi một số nguyên duy nhất là độ dài dãy con không giảm dài nhất.

Example

Test 1

Input
8
13220131
Output
4
Note

Có thể cắt thành 1, 3, 22, 0, 1, 31 và dãy con không giảm dài nhất là 4 đó là dãy 1, 3, 22, 31.
Ta thấy rằng không có cách nào để cắt ra được kết quả tối ưu hơn 4.

Scoring

  • Subtask \(1\) (\(10\%\) số test): xâu \(S\) chỉ gồm các ký tự 0 và 1.
  • Subtask \(2\) (\(20\%\) số test): \(1 \le n \le 20\).
  • Subtask \(3\) (\(20\%\) số test): \(1 \le n \le 200\).
  • Subtask \(4\) (\(50\%\) số test): Không có ràng buộc gì thêm.

Bình luận

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

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

Kỳ thi: