lcs可有三种实现 , 1,n*n/2 , 2 ,dp ,,排序后,寻找最长公共序列 nlogn+n*n 3 , dp ,记录各个len所需的最小数字限额法 ,O(n*lgn) /**/ /*writen by widyrobinwindyrobin@hotmail.com04/10/2008*/ #include < iostream > using namespace std; #define MAX_INPUT_NUM 10000 int limit[MAX_INPUT_NUM]; int main() ... { int inputNum; int curNum; int tempBegin; int tempEnd; int tempMiddle; int len; while(cin>>inputNum)...{ len=0;//the count for(int i=0;i<inputNum;i++)...{ cin>>curNum; tempEnd=len; tempBegin=1; tempMiddle=0; while(tempBegin<=tempEnd)...{ tempMiddle=(tempBegin+tempEnd)>>1; limit[tempMiddle] >=curNum ? tempEnd=tempMiddle-1 : tempBegin=tempMiddle+1; } limit[tempBegin]=curNum;//first position whose value >=curNum ,if no existed ,is end+1 tempBegin >len ? len++ :NULL; }//end for .. cout<<len<<endl; }//end while return 0;}