Cod sursa(job #971939)
#include<fstream>
#include<iostream>
using namespace std;
int n,v[10000],poz[1000],sum[10000],l[10000],s;
int maxim,p;
void dinamica()
{
l[n]=1;
poz[n]=-1;
maxim=1;
for(int i=n-1;i>=1;i--)
{
l[i]=1;
poz[i]=-1;
for(int j=i;j<=n;j++)
{
if(v[i]<v[j] && l[i]<1+l[j])
{
l[i]=l[j]+1;
poz[i]=j;
if(l[i]>maxim)
{
maxim=l[i];
p=i;
}
}
}
}
}
void construire()
{
while(p!=-1)
{
s++;
sum[s]=v[p];
p=poz[p];
}
}
int main()
{
ifstream in("scmax.in");
ofstream out("scmax.out");
in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
dinamica();
construire();
out<<s<<"\n";
for(int i=1;i<=s;i++)
out<<sum[i]<<" ";
}