動態規劃----求一個數組的最長遞減序列
阿新 • • 發佈:2018-12-31
#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; }