时间限制: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.}
本文介绍了一种求解字符串最长递增子序列长度的算法实现,并通过具体示例展示了如何利用动态规划方法来高效解决问题。适用于处理多个字符串的情况。
694

被折叠的 条评论
为什么被折叠?



