asuml

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

【动态规划】单调递增最长子序列

时间限制: 1 Sec  内存限制: 128 MB

题目描述

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

输入

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

输出

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

样例输入

3
aaa
ababc
abklmncdefg

样例输出

1
3
7

递增子序列可以不是连续的。。。
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <stdio.h>
 5 
 6 using namespace std;
 7 
 8 char a[11111],sum[11111];
 9 int n,ans;
10 
11 int main()
12 {
13     while(cin>>n)
14     {
15         while(n--)
16         {
17             cin>>a;
18             ans=1;
19             memset(sum,1,sizeof(sum));
20             for(int i=1;i<strlen(a);i++)
21             {
22                 int tag=0;
23                 for(int j=0;j<i;j++)
24                 {
25                     if(a[j]<a[i]&&tag<sum[j])
26                     {
27                         tag=sum[j];
28                     }
29                 }
30                 sum[i]+=tag;
31                 if(ans<sum[i])
32                     ans=sum[i];
33             }
34             cout<<ans<<endl;
35         }
36     }
37     return 0;
38 }

 

 
posted on 2016-08-01 10:35  asuml  阅读(239)  评论(0编辑  收藏  举报