Pagini recente » Don't Blink! | Istoria paginii utilizator/vv3n0m | Diferente pentru utilizator/robybrasov intre reviziile 37 si 78 | Statistici Stefan Cristian (StefanMC) | Cod sursa (job #1256768)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
/*
Dynamic Programming method.
*/
void read(vector<int> &v){
int n;
cin >> n;
for(int i = 0; i < n; i++){
int x;
cin >> x;
v.push_back(x);
}
}
void solve(const vector<int> &v){
vector<int> best(v.size());
vector<int> pre(v.size(),-1);
best[0] = 1;
int global_max = 1;
int global_index = 0;
for(int i = 1; i < v.size(); i++){
int maxLen = 1;
for(int j = 0; j < i; j++){
if(v[j] < v[i]){
if(maxLen < 1+best[j]){
maxLen = 1+best[j];
pre[i] = j;
}
}
}
if(global_max < maxLen){
global_max = maxLen;
global_index = i;
}
best[i] = maxLen;
}
printf("%d\n",global_max);
vector<int> path;
while(global_index != -1){
path.push_back(global_index);
global_index = pre[global_index];
}
for(int i = path.size()-1; i>=0; i--){
printf("%d ",v[path[i]]);
}
printf("\n");
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
vector<int> v;
read(v);
solve(v);
}