using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication2{ public class Program { private static int length = 4; private int[] arr = { 1,5,4,8}; //這個數組代表這一位能取到的最大長度是多少 private int[] key = new int[length]; public static void Main(String[] args) { new Program().run(); } private void run() { key[0] = 0; int max = 1; for (int i = 1; i < length; i++) { int temp = 0; for (int j = i - 1; j >= 0; j--) { //找出比該位小的數 if (arr[i] > arr[j]) { //temp表示該為能取到的最大長度 遍曆i前面的所有j取 key[j]值最大的一個,如果前面有key[i]的但是比temp小保持原狀 temp = temp < key[j] + 1 ? key[j] + 1 : temp; } } //記錄i點取的最大長度。 key[i] = temp; //max代表最大長度. if (max <= temp) { max++; } } Console.WriteLine("max lenght:" + max); ; for (int i = length - 1; i >= 0; i--) { //如果這個值逆著輸出可以取到對應的最大長度則輸出。 if (key[i] == max - 1) { Console.WriteLine(arr[i] + " "); max--; } } Console.Read(); } }}
結果