NYOJ 17.单调递增最长子序列(动态规划)
2016-08-23 13:13
169 查看
/*
描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg
样例输出
1
3
7
*/
描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg
样例输出
1
3
7
*/
#include<stdio.h> #include<string.h> int main() { int n; char str[10010]; int dp[30];//英文字母共有26个 scanf("%d",&n); getchar(); while(n--) { memset(dp,0x3f,sizeof(dp));//讲dp数组的每个数据初始为无穷大 int i,len,count=0;//dp数组储存数据的实际长度 gets(str); len=strlen(str); for(i=0;i<len;i++) { int low=0,high=count,mid; while(low<=high)//利用二分查找,找到第一个大于或等于前一个元素的位置(c++中lower_bound) { mid=(low+high)/2; if(dp[mid]>=str[i]) high=mid-1; else low=mid+1; } dp[low]=str[i]; if(low==count) count++; } printf("%d\n",count); } return 0; }
相关文章推荐
- ny17单调递增最长子序列(动态规划)
- 【动态规划】单调递增最长子序列
- 单调递增最长子序列 (NYOJ 17) [动态规划]
- NYOJ - 17 - 单调递增最长子序列(动态规划--LIS--单调递增最长子序列)
- nyoj17单调递增最长子序列--动态规划-初步
- 动态规划之单调递增最长子序列
- 动态规划-单调递增最长子序列(三)
- NYOJ-17-单调递增最长子序列【动态规划】
- NYOJ 题目17 单调递增最长子序列(动态规划)
- 单调递增最长子序列-第一个dp(动态规划)
- 单调递增最长子序列--动态规划的经典题目
- 【动态规划】单调递增最长子序列
- 动态规划之-----单调递增最长子序列(nyoj17)
- NYOJ17 单调递增最长子序列(动态规划)
- NYOJ-单调递增最长子序列(动态规划)
- 单调递增最长子序列(动态规划)
- 【动态规划】单调递增最长子序列
- NYOJ17 单调递增最长子序列 【二分法】+【动态规划】
- 单调递增最长子序列 分类: 动态规划 算法 2014-10-29 13:11 74人阅读 评论(0) 收藏
- 单调递增最长子序列(动态规划)