动态规划----求一个数组的最长增序列
来源:互联网 发布:成龙小龙女知乎 编辑:程序博客网 时间:2024/05/22 14:50
#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;}