#include <stdio.h>
#include <stdlib.h>
int findLength(int *src,int *tmp,int len){
int maxLen=0;
for(int i=len-1;i>=0;i--){
int max=0;
for(int j=i+1;j<len;j++){
if(src[j]>src[i]){//注意这儿递增和递减时的区别
max=max<tmp[j]?tmp[j]:max;
}
}
tmp[i]=max+1;
maxLen=maxLen<tmp[i]?tmp[i]:maxLen;
}
return maxLen;
}
void printSeq(int *src,int * tmp,int maxLen,int len){//tmp[i]至少为1
for(int i=0;i<len;i++){//
if(tmp[i]==maxLen){
printf("%d\n",src[i]);
maxLen--;
}
}
}
int main()//
{
int test[]={9,8,7,6,5,4,5,67,68,65,64,100,99};//原来数组的顺序不能变
//这里要一个辅助数组
int len=sizeof(test)/sizeof(int);
int *tmp=(int*)malloc(len*sizeof(int));
memset(tmp,0,len*sizeof(int));
int increaseLen=findLength(test,tmp,len);
printf("the length of increasing sequence is %d\n",increaseLen);
printSeq(test,tmp,increaseLen,len);
free(tmp);
return 0;
}
动态规划----求一个数组的最长增序列
最新推荐文章于 2021-11-27 18:58:55 发布