#include<stdio.h>
int a[]={7,300,275,215,245,198,150,235};
int b[20];//存放以a[i](0<=i<=a.length-1)为最后元素的最大递增子串的长度。
int num = 10;//num为a数组的长度
int k;//存放最大递增子串最后一个元素的下标
//求出b[i]中最大的值,并将其下标存在k中
int Max() {
int temp = 0;
for (int i = 0; i < num; i++) {
if (b[i] > temp) {
temp = b[i];
k = i;
}
}
return temp;
}
// 以a[i](0<=i<=a.length-1)为最后元素的最大递增子串的长度存到b[i]中
int Lis() {
b[0] = 1;//以a[0]为最后元素的子串只有a[0],所以长度为1.
int k;
for (int i = 1; i < num; i++) {
k = 0;
for (int j = 0; j < i; j++) {
if (a[j] <= a[i] && k < b[j]) {
//比较所有小于a[i]并位于a[i]前面的最大子串的长度。比如3 6 4 5,那么以5结尾的最大子串长度
//等于:max{(小于5的元素有3,4)3的最大子串长度,4的最大子串长度}+1;
k = b[j];
}
}
b[i] = k + 1;//max{(小于5的元素有3,4)3的最大子串长度,4的最大子串长度}+1;
}
return Max();
}
void main(){
printf("最大递增子串的长度为:%d\n",Lis());
printf("非递增个数:%d\n",8-Lis());
}