时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
- 求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4- 输入
- 第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 - 输出字符串的最长递增子序列的长度 样例输入
-
3 aaa ababc abklmncdefg
样例输出 -
1 3 7
- 第一行一个整数0<n<20,表示有n个字符串要处理
dp[i]表示以第i个元素结尾的最长递增子序列的长度,ans=max{dp[j]|1<=j<=n},代码如下:
01.
#include<iostream>
02.
#include<algorithm>
03.
#include<string>
04.
using
namespace
std;
05.
const
int
M=10005;
06.
int
dp[M];
07.
int
main()
08.
{
09.
int
n;
10.
cin>>n;
11.
while
(n--)
12.
{
13.
string a;
14.
cin>>a;
15.
int
t=a.length(),ans=0;
16.
for
(
int
i=0;i<t;++i) dp[i]=1;
17.
for
(
int
i=0;i<t;++i)
18.
{
19.
for
(
int
j=i;j>=0;--j)
20.
{
21.
if
(a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1);
22.
}
23.
ans=max(ans,dp[i]);
24.
}
25.
cout<<ans<<endl;
26.
}
27.
return
0;
28.
}