您的位置:首页 > 编程语言 > Java开发

nyoj17 单调递增最长子序列

2017-10-29 21:30 323 查看
时间限制:3000 ms  |  内存限制:65535 KB

难度:4
描述求一个字符串的最长递增子序列的长度

如:dabdbf最长递增子序列就是abdf,长度为4

输入第一行一个整数0<n<20,表示有n个字符串要处理

随后的n行,每行有一个字符串,该字符串的长度不会超过10000输出输出字符串的最长递增子序列的长度样例输入
3
aaa
ababc
abklmncdefg

样例输出
1
3
7


dp[i]表示前I个数最长单调递增子序列长度  

递推式:if(s[i]>s[j])(i>j) dp[i]=dp[j]+1;

java代码

import java.util.Scanner;

public class ny17 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
int n,m;
String str;
int []MaxLen=new int[10001];
char[] s=new char[10001];
n=input.nextInt();
int max=0;
while(n>0){
str=input.next();
s=str.toCharArray();
LIS(MaxLen,s);
for(int i=0;i<s.length;i++){
if(max<MaxLen[i]){
max=MaxLen[i];
}
}
System.out.println(max);
max=0;
n--;
}
}

private static void LIS(int[] maxLen, char[] s) {
// TODO Auto-generated method stub
for(int i=0;i<s.length;i++){
maxLen[i]=1;
for(int j=0;j<i;j++){
if(s[i]>s[j]){
if(maxLen[i]<maxLen[j]+1){
maxLen[i]=maxLen[j]+1;
}
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nyoj17 lis java