View Code
#include<IOSTREAM.H> #include <IOMANIP.H> #include <STRING.H> #include <STDLIB.H> //动态规划:需要一个数组b[n],其中b[i]是以x[i]结尾最长子串的长度,而b[i+1]=max(b[k]&&x[i+1]>x[k]}+1 void main() { char array[]="abcdgdfgdggefrte"; int *p=(int*)malloc(strlen(array)*sizeof(int)); p[0]=1; for (int i=1;i<strlen(array);i++) { int temp=0; for (int k=0;k<i;k++) { if (array[i]>array[k]) { if (temp<p[k]) { temp=p[k]; } } } p[i]=temp+1; } for (i=0;i<strlen(array);i++) { cout<<setw(3)<<p[i]; } int index=0; int num=0,temp=index; for (i=0;i<strlen(array);i++) { if(index<p[i]) {index=p[i];temp=i;} } cout<<array[temp]; while(num!=index) { for (int i=temp-1;i>=0;i--) { if(array[temp]>array[i]&&p[i]==p[temp]-1) { temp=i;cout<<array[i];break; } } num++; } cout<<endl; free(p); }