单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
-
描述
- 求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4- 输入
- 第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 - 输出字符串的最长递增子序列的长度 样例输入
-
3 aaa ababc abklmncdefg
样例输出 -
1 3 7
-
#include <iostream> #include <stdio.h> #include <algorithm> #include <fstream> #include <string.h> #include <cmath> #include <stdlib.h> #include <iostream> #include <string.h> #define INF 99999; using namespace std; int main() { int n,length,front_max,max; scanf("%d",&n); char s[10002]; int num[10002]; while(n--) { max=0; scanf("%s",s); length=strlen(s); for(int i=0;i<length;i++)num[i]=1; for(int i=1;i<length;i++) { for(int j=0;j<i;j++) { if(s[j]<s[i]&&num[j]+1>num[i])num[i]=num[j]+1; } } for(int i=0;i<length;i++) { if(max<num[i])max=num[i]; } printf("%d\n",max); } }
- 第一行一个整数0<n<20,表示有n个字符串要处理