Pagini recente » Cod sursa (job #1448283) | Cod sursa (job #2269501) | Cod sursa (job #1094971) | Cod sursa (job #952285) | Cod sursa (job #1527278)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
/**
* Created by Ciprian on 16.11.2015.
*/
public class Main{
public static void main(String[] args) throws FileNotFoundException {
Sir sir = new Sir("scmax.in");
sir.DP(0);
sir.printSubsir("scmax.out");
}
static class Sir {
int[] sir;
//max lenght of the subsequence that starts with field at index i
int[] memo;
int[] next;
public Sir(String filename) throws FileNotFoundException {
Scanner reader = new Scanner(new FileInputStream(filename));
int n = reader.nextInt();
this.sir = new int[n];
for (int i = 0; i < n; i++) {
sir[i] = reader.nextInt();
}
reader.close();
this.memo = new int[sir.length];
this.next = new int[sir.length];
}
//max lenght of a subsir when s[i] is the first element
public int DP(int i) {
if (memo[i] != 0) return memo[i];
if (i == sir.length - 1) return 1;
int max = 0;
for (int j = i + 1; j < sir.length; j++) {
int dpj = DP(j);
if (sir[i] < sir[j] && (max < dpj)) {
max = dpj;
next[i] = j;
}
}
memo[i] = 1 + max;
return memo[i];
}
public void printSubsir(String filename) throws FileNotFoundException {
int max = 0;
for (int i = 1; i < memo.length; i++) {
if (memo[max] < memo[i]) {
max = i;
}
}
int length = memo[max];
int current = max;
PrintWriter writer = new PrintWriter(filename);
writer.write(String.valueOf(length) + "\n");
do {
writer.write(String.valueOf(sir[current] + " "));
current = next[current];
length--;
} while (length > 0);
writer.close();
}
}
}