NYOJ 17 单调递增最长子序列 (二分 STL,lower_bound)
2015-09-09 21:16
218 查看
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB难度:4
描述求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出输出字符串的最长递增子序列的长度
样例输入
3 aaa ababc abklmncdefg
样例输出
1 3 7
注 - 此题为 :NYOJ 17 单调递增最长子序列 (STL,lower_bound)
题意:二分 找 最长上升子序列的长度。
STL: t = lower_bound(s,s+top,m)-s; 返回值第一个大于等于 m 的数的 地址 ,s
是一个数组,K 为其长度,要减 s 得第一个大于等于m 的数的下标
将那个位置用 m 替换 (得到的最长上升子序列,并不一定是正确的,但是,长度是正确的)
已AC代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char ch[12000],str[12000]; int main() { int n; scanf("%d",&n); while(n--) { int len,i,j; scanf("%s",ch); len=strlen(ch); str[0]=ch[0]; j=1; for(i=1;i<len;++i) { if(ch[i]>str[j-1]) { str[j]=ch[i]; j++; } else { int t=lower_bound(str,str+j,ch[i])-str; str[t]=ch[i]; } } printf("%d\n",j); } return 0; }
相关文章推荐
- wr703n路由器搭载openwrt系统挂载U盘历程
- 常用正则表达式
- iOS容易造成循环引用的三种场景
- 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)
- 文档对象模型DOM(一)
- python文件操作
- CocoaPods安装教程
- 第三方应用使用微博登录授权功能注意事项
- HDU2067 - 小兔的棋盘 (递推)
- Redis各种数据结构介绍以及相应的业务场景应用
- Mysql初始化root密码和允许远程访问
- linux 初级阶段整理笔记
- 深入剖析U3D的Miss Mono Behaviour问题
- HTML 30分钟入门教程
- maven Spring 4.2+SpringMVC+dubbo解决TypeProxyInvocationHandler.invoke(SerializableTypeWrapper.java:239)
- C#23种设计模式
- Kmeans算法寻找合适K值
- hdu2041
- 蚂蚁
- 计算几何之基础篇