Pagini recente » Cod sursa (job #1977506) | Cod sursa (job #1903316) | Cod sursa (job #2099523) | Cod sursa (job #354100) | Cod sursa (job #1088324)
//
// main.cpp
// subsir_crescator_maximal
//
// Created by Casuneanu Andrei on 20/01/14.
// Copyright (c) 2014 Casuneanu Andrei. All rights reserved.
//
#include <fstream>
#define NMAX 1008
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void citire();
void showtime();//programarea dinamica
void constr_sol();
void afisare();
int n;
int a[NMAX];
int Lg[NMAX];
int prec[NMAX];
int sir[NMAX];//construiesc solutia
int lgmax, pozmax;
int main(int argc, const char * argv[])
{
citire();
showtime();
constr_sol();
afisare();
return 0;
}
void afisare()
{
fout <<lgmax<<'\n';
int i;
for (i=lgmax; i>0; i--)
fout <<sir[i]<<' ';
fout <<'\n';
fout.close();
}
void constr_sol()
{
lgmax=0;
int i;
for (i=1; i<=n; i++)
if (lgmax<Lg[i])
{
lgmax=Lg[i];
pozmax=i;
}
//construiesc sirul
i=pozmax;
int crt=0;
while (i)
{
sir[++crt]=a[i];
i=prec[i];
}
}
void showtime()
{
Lg[1]=1;
prec[1]=0;
int i, j;
for (i=2; i<=n; i++)
{
Lg[i]=1;
prec[i]=0;
for (j=1; j<i; j++)
if (a[j]<a[i] && Lg[j]+1>Lg[i])
{
Lg[i]=1+Lg[j];
prec[i]=j;
}
}
}
void citire()
{
fin >>n;
int i;
for (i=1; i<=n; i++)
fin >>a[i];
}