最长递增子序列
2014-06-05 00:37
253 查看
#include <iostream> #include <iterator> #include <time.h> #include <vector> using namespace std; #define MAXNUM 10 int MaxLPre[MAXNUM]; void CreateRAdjTable(vector<int> &list,vector<int> *RAdjTable) { int size=list.size(); for(int i=0;i<size-1;i++) for(int j=i+1;j<size;j++) { if(list[i]<list[j]) RAdjTable[j].push_back(i); } } int MaxL(const vector<int> &list,vector<int> *RAdjTable,int *L,int j) { int maxl=0; for(int i=0;i<RAdjTable[j].size();i++) { if(L[ RAdjTable[j][i] ]>maxl) { maxl=L[ RAdjTable[j][i] ]; MaxLPre[j]=RAdjTable[j][i]; } } return maxl; } void CreateLS(const vector<int> &list,vector<int> *RAdjTable,int *L) { for(int j=0;j<MAXNUM;j++) if( RAdjTable[j].empty() ) { L[j]=1; MaxLPre[j]=-1; } else { L[j]=1+MaxL(list,RAdjTable,L,j); } } void ShowPath(const vector<int> &list,int j) { vector<int> stack; while(j != -1) { stack.push_back(list[j]); j=MaxLPre[j]; } while(!stack.empty()) { cout<<stack.back()<<"\t"; stack.pop_back(); } cout<<endl; } void main() { vector<int> list; vector<int> RAdjTable[MAXNUM]; int L[MAXNUM]; srand(time(0)); while(list.size() != MAXNUM) { list.push_back(rand()%100); } cout<<"第一行为随机产生的元素列,第二行为数组序号。(默认是10个随机数)"<<endl; cout<<endl; copy(list.begin(),list.end(),ostream_iterator<int>(cout,"\t")); cout<<endl; CreateRAdjTable(list,RAdjTable); CreateLS(list,RAdjTable,L); for(int m=0;m<MAXNUM;m++) cout<<L[m]<<"\t"; cout<<endl; cout<<"最长递增子序列为:"<<endl; cout<<endl; int j=0; for(int n=0;n<MAXNUM;n++) if(L >L[j]) j=n; ShowPath(list,j); cout<<endl; }
相关文章推荐
- 最长单调递增子序列
- POJ2533 Longest Ordered Subsequence(最长递增子序列)
- longest increasing subsequence (最长递增子序列)
- hdu 1160(最长递增子序列+输出)
- 编程之美2.16 最长递增子序列
- 马戏团叠罗汉-之最长递增子序列
- 最长递增子序列
- [dp]最长单调递增子序列LIS
- HDU 1025 Constructing Roads In JGShining's Kingdom(最长递增子序列)
- 【51NOD-0】1134 最长递增子序列
- 求最长单调递增【等差】子序列
- HDU 1025 最长递增子序列
- LIS(最长递增子序列) Zigzag
- 最长递增子序列
- leetcode300---Longest Increasing Subsequence(最长递增子序列)
- 最长递增子序列问题
- 最长递增子序列
- 求数组中最长递增子序列
- 最长递增子序列B
- hdu 6197 贪心 最长单调递增子序列