单调递增最长子序列
来源:互联网 发布:sql列转行函数 编辑:程序博客网 时间:2024/06/06 02:28
单调递增最长子序列
时间限制: 1 Sec 内存限制: 128 MB提交: 7 解决: 5
[提交][状态][论坛]
题目描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3aaaababcabklmncdefg
样例输出
137
#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
char str1[1005];
int dp[1010];
int seach(int left,int right,int x)
{
if(dp[left]>=x)return left;
while(left<=right){
int mid=(left+right)/2;
if(x<=dp[mid])right=mid-1;
else{
left=mid+1;
if(dp[left]>=x)return left;
}
}
}
int main()
{
int n,m;
cin>>n;
while(n--){
m=0;
getchar();
cin>>str1;
memset(dp,0,sizeof(dp));
int len=strlen(str1);
dp[m=1]=str1[0];
for(int i=1;i<len;i++){
if(str1[i]>dp[m])dp[++m]=str1[i];
else dp[seach(1,m,str1[i])]=str1[i];
}
printf("%d\n",m);
}
return 0;
}
#include<iostream>
#include<string.h>
using namespace std;
char str1[1005];
int dp[1010];
int seach(int left,int right,int x)
{
if(dp[left]>=x)return left;
while(left<=right){
int mid=(left+right)/2;
if(x<=dp[mid])right=mid-1;
else{
left=mid+1;
if(dp[left]>=x)return left;
}
}
}
int main()
{
int n,m;
cin>>n;
while(n--){
m=0;
getchar();
cin>>str1;
memset(dp,0,sizeof(dp));
int len=strlen(str1);
dp[m=1]=str1[0];
for(int i=1;i<len;i++){
if(str1[i]>dp[m])dp[++m]=str1[i];
else dp[seach(1,m,str1[i])]=str1[i];
}
printf("%d\n",m);
}
return 0;
}
0 0
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 单调递增最长子序列
- 单调递增最长子序列
- 最长单调递增子序列
- 单调递增最长子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 单调递增最长子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- android mediaplayer 原来这么简单!
- JavaScript学习笔记1--语法篇摘录
- 基数排序
- DynamicObject实现简单的AOP
- jogl使用VBO
- 单调递增最长子序列
- 【甘道夫】Java Hello World on Spark
- 局域网UDP异步传输,只收到命令号,数据包的内容是空的
- from nova ironic to horizon(5)
- PropertyPlaceholderConfigurer的用法
- jstree获得节点的相对路径
- 人际交往之会议礼貌
- iScroll-5拉动刷新(pull-to-refresh)功能实现与iScroll-4上拉刷新的一点改进
- iOS 无限轮播图的实现思路