# POJ 2533

1019人阅读 评论(0)

Description
A numeric sequence of ai is ordered if a1 < a2 < … < aN. Let the subsequence of the given numeric sequence ( a1, a2, …, aN) be any sequence ( ai1, ai2, …, aiK), where 1 <= i1 < i2 < … < iK <= N. For example, sequence (1, 7, 3, 5, 9, 4, 8) has ordered subsequences, e. g., (1, 7), (3, 4, 8) and many others. All longest ordered subsequences are of length 4, e. g., (1, 3, 5, 8).

Your program, when given the numeric sequence, must find the length of its longest ordered subsequence.

Input
The first line of input file contains the length of sequence N. The second line contains the elements of sequence - N integers in the range from 0 to 10000 each, separated by spaces. 1 <= N <= 1000

Output
Output file must contain a single integer - the length of the longest ordered subsequence of the given sequence.

Sample Input*

7
1 7 3 5 9 4 8

Sample Output

4


import java.util.Scanner;

public class Main{
private static int num = 0;

private static int[] array = new int[10000];

private static int[] dp = new int[10000];

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
num = scanner.nextInt();
for (int i = 1; i <= num; i++) {
array[i] = scanner.nextInt();
}
dp[1] = 1;
for (int i = 2; i <= num; i++) {
int temp = 0;
for (int j = 1; j < i; j++) {
if (array[i] > array[j]) {
if (temp < dp[j]) {
temp = dp[j];
}
}
}
dp[i] = temp + 1;
}
int maxlen = 0;
for (int i = 1; i <=num; i++) {
System.out.println(dp[i]);
}
for (int i = 1; i <= num; i++) {
maxlen = maxlen >= dp[i] ? maxlen : dp[i];
}
System.out.println(maxlen);
}
scanner.close();
}
}

0
0

个人资料
• 访问：112184次
• 积分：1387
• 等级：
• 排名：千里之外
• 原创：41篇
• 转载：3篇
• 译文：0篇
• 评论：32条
博客专栏
 数据结构与算法 文章：0篇 阅读：0
 android 学习 文章：11篇 阅读：28405
最新评论