nyoj17 单调递增最长子序列
2013-06-28 22:02
369 查看
题目描述
单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB难度:4
描述求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出输出字符串的最长递增子序列的长度
样例输入
3 aaa ababc abklmncdefg
样例输出
1 3 7
解答
import java.util.Scanner; /** * 动规 * @author Administrator * */ public class n017_单调递增最长子序列 { public static void main(String[] args) { String[] ss=getInput(); for(String s: ss){ //输出字符串的最长递增子序列的长度 System.out.println(findMax(s)); } } /** * 接收输入 * 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 * @return */ public static String[] getInput(){ Scanner scan=new Scanner (System.in); String[] ss=new String[scan.nextInt()]; for(int i=0;i<ss.length;i++){ ss[i]=scan.next(); } return ss; } /** * 寻找单调递增最大长度 * @param s * @return */ public static int findMax(String s){ //存放长度 int[] nums=new int[s.length()]; for(int i=0;i<s.length();i++){ int c1=s.charAt(i); int temp=0; for(int j=i;j>=0;j--){ if(c1>s.charAt(j)){ if(nums[j]>temp) temp=nums[j]; } } //前面已经包含的最大字符长度加上本身的长度就等于 // 这个字符的最大长度 nums[i]=temp+1; } //找到最大长度 int max=0; for(int i:nums){ if(i>max) max=i; } return max; } }
本题已AC
原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=17
相关文章推荐
- NYOJ 17 单调递增最长子序列
- NYOJ 17:单调递增最长子序列【二分】
- NYOJ 17 单调递增最长子序列
- nyoj 16 矩形嵌套 & nyoj 17 单调递增最长子序列
- NYOJ 17 单调递增最长子序列
- 动态规划之-----单调递增最长子序列(nyoj17)
- nyoj44 nyoj17 HDU1087 DP动规 连续字符串的和最大值 单调递增最长子序列 单调递增子序列最小个数 非连续最大递增子序列
- NYOJ 单调递增最长子序列 17
- nyoj 17 单调递增最长子序列
- NYOJ 17-单调递增最长子序列
- nyoj 题目17 单调递增最长子序列
- 单调递增最长子序列(NYOJ 17)
- nyoj17_单调递增最长子序列
- nyoj 17单调递增最长子序列
- nyoj-17-单调递增最长子序列
- NYOJ-17-单调递增最长子序列
- nyoj17 单调递增最长子序列(经典dp三)
- nyoj 17 单调递增最长子序列
- NYOJ 17-单调递增最长子序列
- NYOJ 17 单调递增最长子序列