#include <stdio.h>
#include <stdlib.h>
//http://blog.csdn.net/wumuzi520/article/details/7378306
int findLength(int * src,int *tmp,int len){
int maxLen=0;
for(int i=len-1;i>=0;i--){
int max=0;//表示以src[i]开头的最长递减子序列的长度
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){
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,66,65,64,63,62};
//这里要一个辅助数组
int len=sizeof(test)/sizeof(int);
int *tmp=(int*)malloc(len*sizeof(int));
memset(tmp,0,len*sizeof(int));
int decreaseLen=findLength(test,tmp,len);
printf("the length of decreasing sequence is %d\n",decreaseLen);
printSeq(test,tmp,decreaseLen,len);
free(tmp);
return 0;
}
动态规划----求一个数组的最长递减序列
最新推荐文章于 2019-10-10 20:12:01 发布