package 实验三;
public class 最长上升子序列 {
public static void main(String[] args) {
E e=new E();
e.way();
e.show1();
e.show2();
e.show3();
e.show4();
}
}
class E{
int [] a= {5,8,9,2,3}; //数据
int [] b=new int[a.length]; //记录最长上升子序列的个数
int i=0,j=0;
int length; //记录输出的下标
int max=0;
void way() {
for(i=0;i<a.length;i++) {
b[i]=1; //一开始全部初始化为1
for(j=0;j<i;j++) { //
if(a[j]<a[i] && b[j]+1>=b[i])
b[i]=b[j]+1;
}
}
}
void show1() {
System.out.print("a[]为:");
for(i=0;i<a.length;i++) {
System.out.printf("%-3d",a[i]);
}
System.out.println();
}
void show2() {
System.out.print("b[]为:");
for(i=0;i<a.length;i++) {
System.out.printf("%-3d",b[i]);
}
System.out.println();
}
void show3() {
for(i=0;i<a.length;i++) {
if(b[i]>max)
max=b[i];
}
System.out.println("最长上升序列数为:"+max);
}
void show4() {
int M=max;
System.out.print("最长上升序列逆顺序为:");
for(i=a.length-1;i>=0;i--) {
if(b[i]==M) {
System.out.print(a[i]+" ");
M--;
}
}
}
}
结果
a[]为:5 8 9 2 3
b[]为:1 2 3 1 2
最长上升序列数为:3
最长上升序列逆顺序为:9 8 5