单调递增最长子序列(Lis)

来源:互联网 发布:秦始皇活着吗 知乎 编辑:程序博客网 时间:2024/05/16 11:06
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
求一个字符串的最长递增子序列的长度

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


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

随后的n行,每行有一个字符串,该字符串的长度不会超过10000


输出

输出字符串的最长递增子序列的长度


样例输入
3
aaa
ababc

abklmncdefg


样例输出
1
3

7


#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[10010];int vis[10010];int main(){int t;scanf("%d",&t);while(t--){memset(vis,0,sizeof(vis));scanf("%s",s);int p=strlen(s);for(int i=p-1;i>=0;i--){for(int j=i+1;j<p;j++){if(s[j]>s[i]&&vis[i]<vis[j]+1){//这里要好好想想 vis[i]=vis[j]+1;}}}int max=0;for(int i=0;i<p;i++){if(vis[i]>max)max=vis[i];}printf("%d\n",max+1);//如果将vis【】初始化为1,这里就不用加1了; }return 0;}


0 0
原创粉丝点击