题目
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入描述:
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出描述:
输出字符串的最长递增子序列的长度
样例输入:
复制
3
aaa
ababc
abklmncdefg
样例输出:
1
3
7
分析:
求字符串的最长递增子序列,可将问题分解为一个个小问题,先计算字符串长度为1的最长递增,再计算长度为2,以此类推,直到计算为n
思路:(1.以下j表示数组下标 2.括号中为举例说明 如:dabdbf)
- 计算长度为前j个字符串子串的最长递增子序列(如:babd)
- 将第j个字符与前j-1个字符一一比较(如,d与bab进行比较)
- 若第j个大于前j-1个中任意一个字符k,取dp[j]与dp[k]+1最大值
- dp[k]+1是因为前k个字符的最大递增序列加上第j个字符,最大递增子序列为dp[k]+1
代码如下:
/*
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入描述:
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出描述:
输出字符串的最长递增子序列的长度
样例输入:
复制
3
aaa
ababc
abklmncdefg
样例输出:
1
3
7
*/
#include<stdio.h>
#include<string.h>
int main(void){
int n;
int i,j,k;
scanf("%d"