標準14002/最長成長部分数列4
1792 ワード
質問する
に答える
説明:
これは、最大増分部分数列からこの数列に出力される問題です.
前に知っておくべきA[i],D[i]のほかに,V[i]を求める.
V[i]=A[i]の前の数値インデックスが必要です.
つまり、A[i]の前では、A[V[i]の長さが最も長い.
コード#コード#
import java.util.Scanner;
public class Num14002 {
static int[] a;
static int[] d;
static int[] v;
static void go(int p) {
if (p == -1) return;
go(v[p]);
System.out.print(a[p] + " ");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
a = new int[n];
for (int i=0; i<n; i++) {
a[i] = sc.nextInt();
}
d = new int[n];
v = new int[n];
for (int i=0; i<n; i++) {
d[i] = 1;
v[i] = -1;
for (int j=0; j<i; j++) {
if (a[j] < a[i] && d[i] < d[j]+1) {
d[i] = d[j]+1;
v[i] = j;
}
}
}
int ans = d[0];
int p = 0;
for (int i=0; i<n; i++) {
if (ans < d[i]) {
ans = d[i];
p = i;
}
}
System.out.println(ans);
go(p);
System.out.println();
}
}
コードの説明
注意:
ソース:https://www.acmicpc.net/problem/14002
Reference
この問題について(標準14002/最長成長部分数列4), 我々は、より多くの情報をここで見つけました https://velog.io/@dogit/백준-14002-가장-긴-증가하는-부분-수열-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol