您的位置:首页 > 其它

单调递增最长子序列

2017-04-01 10:28 330 查看
4000

描述
求一个字符串的最长递增子序列的长度

如:dabdbf最长递增子序列就是abdf,长度为4

输入第一行一个整数0<n<20,表示有n个字符串要处理

随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg


样例输出
1
3
7


本题做法是:总是求以第i个字符为最后一个的最长递增子序列,具体实现就是遍历前i-1个字符找到所有比第i个字符要小的字符,从这些字符中找到第j个字符,对第j个字符的要求就是b[j]最大,核心代码:使用a数组存字符,b数组存以第i个字符为最后一个字符的最长递增子序列

核心代码

for(int j=0;j<i;j++)

           {

               if(a[i]>a[j])

               b[i]=max(b[i],b[j]+1);

           }


#include<iostream>
#include<stdio.h>
#include<fstream>
#include<string.h>
#include<algorithm>
#define MAX 9999999
using namespace std;
char a[10500];
int b[10500];
int main()
{

int n;
scanf("%d\n",&n);
while(n--)
{
gets(a);
int le=strlen(a);
for(int i=0;i<le;i++)
b[i]=1;
int ma=0;
for(int i=0;i<le;i++)
{
for(int j=0;j<i;j++)
{
if(a[i]>a[j])
b[i]=max(b[i],b[j]+1);

}
ma=max(b[i],ma);
}
printf("%d\n",ma);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: