思路参考:http://blog.csdn.net/joylnwang/article/details/6766317
#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int m,n;
vector<int> v;
cin >> m;
int num;
for(int i=0;i<m;i++)
{
cin >> num;
v.push_back(num);
}
vector<int> f(m,1);
vector<int> pre(m,1);
for(int i=0;i<m;i++)
{
pre[i] = i;
}
int max_ = 0;
int pos = 0;
for(int i=0;i<m;i++)
for(int j=0;j<i;j++)
{
if(v[i] > v[j] && f[j]+1>f[i])
{
f[i] = f[j] + 1;
pre[i] = j;
}
if(max_ < f[i])
{
max_ = f[i];
pos = i;
}
}
vector<int> res(max_);
int i = max_ - 1;
while(pre[pos] != pos)
{
res[i--] = v[pos];
pos = pre[pos];
}
res[i] = v[pos];
for(int i=0;i<max_;i++)
{
cout << res[i] << endl;
}
system("pause");
return 0;
}