動態規劃例題:最長不下降子序列c序列
阿新 • • 發佈:2019-01-02
問題:
在一個數字序列中,找到最長的子序列(可以不連續),使得這個子序列是不下降(非遞減)的。
求出此序列的長度。
輸入:8
1 2 3 -9 3 9 0 11
輸出:6
(即:1 2 3 3 9 11)
解:
public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = in.nextInt(); } int[] dt = new int[n]; int maxNum = -1;// 記錄最大的dt[i] for (int i = 0; i < n; i++) { dt[i] = 1;// 邊界初始條件(先假設每個元素自成一個序列) for (int j = 0; j < i; j++) { // 如果當a[i]不小於a[j]且dt[i]更新後的長度比現在長,才需要更新 if (a[i] >= a[j] && (dt[j] + 1 > dt[i])) dt[i] = dt[j] + 1;// 更新dt[i]的長度 } // 這個for迴圈結束後,此時的dt[i]就是經過i點的最長不下降子序列的長度 maxNum = Math.max(maxNum, dt[i]); } System.out.println(maxNum); } }