单调递增最长子序列

系统 1531 0
View Code
        
           1
        
         #include<iostream>
        
2 #include<cstdio>
3 #include<cstring>
4 #define Max 10010
5 #define max(a,b) (((a) > (b)) ? (a) : (b))
6 using namespace std;
7 char ch[Max];
8 int d[Max];
9 int dp( int i)
10 {
11 int k,ans= 1 ;
12 if (d[i]!=- 1 )
13 return d[i];
14 for (k=i- 1 ;k>= 0 ;k--)
15 {
16 if (ch[i]>ch[k])
17 {
18 d[k]=dp(k);
19 ans=max(ans,d[k]+ 1 );
20 }
21 }
22 return d[k]=ans;
23 }
24 int main()
25 {
26 int n,len,ans,i;
27 scanf( " %d " ,&n);
28 while (n--)
29 {
30 ans= 0 ;
31 scanf( " %s " ,ch);
32 len=strlen(ch);
33 memset(d,- 1 , sizeof (d));
34 for (i= 0 ;i<len;i++)
35 {
36 ans=max(ans,dp(i));
37 }
38 printf( " %d\n " ,ans);
39 }
40 return 0 ;
41 }

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

 
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
        3

aaa

ababc

abklmncdefg
      
样例输出
        1

3

7
      

单调递增最长子序列


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论