18/03/2025
Làm sao để có câu trả lời hay nhất?
18/03/2025
20/03/2025
19/03/2025
Huế Nguyễn này hơi khó
18/03/2025
```cpp
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
cin >> s;
// Tạo danh sách các xâu đơn hợp lệ
vector<string> valid_strings(26);
for (char c = 'a'; c <= 'z'; ++c) {
int index = c - 'a';
valid_strings[index] = string(index + 1, c); // Tạo xâu đơn
}
// Tìm xâu ghép dài nhất
int max_length = 0;
vector<int> dp(26, 0); // dp[i] lưu độ dài xâu ghép kết thúc bằng chữ cái i
for (char c : s) {
int index = c - 'a';
// Cập nhật độ dài xâu ghép cho chữ cái hiện tại
int current_length = valid_strings[index].length();
dp[index] = max(dp[index], current_length);
// Cập nhật độ dài cho các chữ cái trước đó
for (int j = 0; j < index; ++j) {
if (dp[j] > 0) {
dp[index] = max(dp[index], dp[j] + current_length);
}
}
// Cập nhật độ dài tối đa
max_length = max(max_length, dp[index]);
}
cout << max_length << endl;
return 0;
}
```
Nếu bạn muốn hỏi bài tập
Các câu hỏi của bạn luôn được giải đáp dưới 10 phút
CÂU HỎI LIÊN QUAN
18/03/2025
28/02/2025
Top thành viên trả lời