单调递增最长子序列(LIS)【NY】-17
2017-08-09 19:45
183 查看
点击打开链接
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出输出字符串的最长递增子序列的长度
样例输入
样例输出
来源经典题目
解析:LIS的裸题,
代码:
1.O( n^2 )
2.
O( nlogn )
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB难度:4
描述求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出输出字符串的最长递增子序列的长度
样例输入
3 aaa ababc abklmncdefg
样例输出
1 3 7
来源经典题目
解析:LIS的裸题,
代码:
1.O( n^2 )
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define INF 0x7fffffff const int maxn=10005; int dp[maxn]; char a[maxn]; int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",a); int l1=strlen(a); int ans=0; for(int i=0;i<l1;i++) { dp[i]=1; //只包含ai的子序列 for(int j=0;j<i;j++) { if(a[j]<a[i]) //在满足j<i并且aj<ai的以aj为结尾的上升子列末尾,追加上ai后得到的子序列 dp[i]=max(dp[i],dp[j]+1); } ans=max(ans,dp[i]); } printf("%d\n",ans); } return 0; }
2.
O( nlogn )
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define INF 0x7fffffff const int maxn=10005; int dp[maxn]; char a[maxn]; int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",a); int l1=strlen(a); fill(dp,dp+l1,INF); for(int i=0;i<l1;i++) *lower_bound(dp,dp+l1,a[i])=a[i]; printf("%d\n",lower_bound(dp,dp+l1,INF)-dp); } return 0; }
相关文章推荐
- NYOJ 17 单调递增最长子序列(LIS)
- nyoj 17 单调递增最长子序列 【LIS】
- nyoj 17 单调递增最长子序列 (LIS)
- NYOJ - 17 - 单调递增最长子序列(动态规划--LIS--单调递增最长子序列)
- NY--17 -- 单调递增最长子序列 [经典DP]
- nyoj 单调递增最长子序列 17 (LIS模板)
- nyoj--17 单调递增最长子序列(LIS)
- NYOJ 17 单调递增最长子序列 (LIS模板)
- nyoj17单调递增最长子序列(dp)
- nyist oj 17 单调递增最长子序列 (动态规划经典题)
- NYOJ17——单调递增最长子序列
- 单调递增最长子序列 南工17
- NYOJ 17 单调递增最长子序列
- NYOJ 题目17 单调递增最长子序列 (DP) hdu 题目2845 Bean
- nyoj 17单调递增最长子序列
- NYOJ 17 单调递增最长子序列
- nyoj17 单调递增最长子序列
- 单调递增最长子序列(南阳oj17)(经典dp)
- NYOJ17,单调递增最长子序列
- NYOJ17-单调递增最长子序列