单调递增最长子序列(一)
2017-08-08 15:58
239 查看
点击打开链接
难度:4
描述 求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入 第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入
样例输出
解析:求解最长递增子序列,用dp[i],记录第i个数可以连接最长子串个数。
这个算法复杂度时O(n2),如果数据量大,可以在筛选时用二分法使复杂度降低到O(nlogn)。
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB难度:4
描述 求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入 第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入
3 aaa ababc abklmncdefg
样例输出
1 3 7
解析:求解最长递增子序列,用dp[i],记录第i个数可以连接最长子串个数。
这个算法复杂度时O(n2),如果数据量大,可以在筛选时用二分法使复杂度降低到O(nlogn)。
#include<stdio.h> #include<cstring> #include<algorithm> using namespace std; const int N = 1e4+10; char a ; int n,ans,maxn,f ; int main() { int t,j; scanf("%d",&t); while(t--){ scanf("%s",a); n=strlen(a); ans=0; int m = 0; for(int i = 0; i < n ; i++){ maxn=0; for(j=0;j<=i;j++){ if(a[j]<a[i]&&maxn<f[j]) maxn=f[j]; } f[i]=maxn+1; if(f[i]>ans) ans=f[i]; } printf("%d\n",ans); } }
相关文章推荐
- 单调递增最长子序列 分类: 动态规划 算法 2014-10-29 13:11 74人阅读 评论(0) 收藏
- 单调递增最长子序列(LIS)
- nyoj 16 矩形嵌套 & nyoj 17 单调递增最长子序列
- NYOJ 17 单调递增最长子序列
- 单调递增最长子序列
- 单调递增最长子序列(动态规划)
- NYOJ 17 单调递增最长子序列
- 单调递增最长子序列
- NYOJ 17-单调递增最长子序列
- UVA 10131 - Is Bigger Smarter?非连续的单调递增的最长子序列的长度
- NY--17 -- 单调递增最长子序列 [经典DP]
- nyoj 17 单调递增最长子序列 【dp】
- 单调递增最长子序列
- 单调递增最长子序列(LIS)【NY】-17
- 单调递增最长子序列
- 题目17:单调递增最长子序列
- NYOJ17,单调递增最长子序列
- Ny17单调递增最长子序列
- 单调递增最长子序列
- 单调递增最长子序列(经典dp)