您的位置:首页 > 其它

单调递增最长子序列

2015-04-17 17:48 169 查看


单调递增最长子序列

时间限制: 1 Sec  内存限制: 128 MB
提交: 7  解决: 5

[提交][状态][论坛]

题目描述

求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4

输入

第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000

输出

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

样例输入

3aaaababcabklmncdefg

样例输出

137

#include<cstdio>

#include<iostream>

#include<string.h>

using namespace std;

char str1[1005];

int dp[1010];

int seach(int left,int right,int x)

{

 if(dp[left]>=x)return left;

 while(left<=right){

  int mid=(left+right)/2;

  if(x<=dp[mid])right=mid-1;

  else{

   left=mid+1;

   if(dp[left]>=x)return left;

  }

 }

}

int main()

{

 int n,m;

 cin>>n;

 while(n--){

  m=0;

  getchar();

  cin>>str1;

  memset(dp,0,sizeof(dp));

  int len=strlen(str1);

  dp[m=1]=str1[0];

  for(int i=1;i<len;i++){

   if(str1[i]>dp[m])dp[++m]=str1[i];

   else dp[seach(1,m,str1[i])]=str1[i];

  }

  printf("%d\n",m);

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: