单调递增最长子序列
题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=17
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
4
-
描述
-
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4-
输入
-
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
- 输出字符串的最长递增子序列的长度 样例输入
-
3 aaa ababc abklmncdefg
样例输出
-
1 3 7
-
第一行一个整数0<n<20,表示有n个字符串要处理
/*
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg样例输出
1
3
7来源
经典题目
*/
#include <iostream>
#include <string>
using namespace std;
void LIS(const string& str)
{
int *arr=new int[str.length()];
for ( int i=0 ; i<str.length() ; ++i ){
arr[i]=1;
}
int maxLen=1;
for ( int i=1 ; i<str.length() ; ++i ){
int temp=1;
for ( int j=0 ; j<i ; ++j ){
int temp=str[i]>str[j] ? (arr[j]+1):arr[i];
arr[i]=arr[i]<temp ? temp:arr[i];
}
maxLen= maxLen>arr[i] ? maxLen:arr[i];
}
cout<<maxLen<<endl;
delete []arr;
}
int main()
{
int num;
string str;
cin>>num;
while (num--){
cin>>str;
LIS(str);
}
return 0;
}