Cod sursa(job #1454225)

Utilizator CollermanAndrei Amariei Collerman Data 25 iunie 2015 20:08:41
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream> // varianta 1 - programare dinamica (25.06.2015)
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MMAX = 100005;

int n, best, Max, poz, nr;
int v[MMAX], sol[MMAX], prec[MMAX];

void pd()
{
    for(int i=1; i<=n; i++) {
        for(int j=1, best=0; j<=i-1; j++) {
            if(v[i] > v[j] && sol[j] > best) {
                best = sol[j];
                sol[i] = sol[j] + 1;
                prec[i] = j;
            }
        }
        if(sol[i] > Max) {
            Max = sol[i];
            poz = i;
        }
    }
}

void traceback(int i)
{
    if(prec[i]) traceback(prec[i]);
    fout << v[i] << ' ';
}

int main()
{
    fin >> n;
    for(int i=1; i<=n; i++) fin >> v[i];
    fill_n(sol, MMAX, 1);

    pd();
    fout << Max << '\n';
    traceback(poz);

    fin.close();
    fout.close();
    return 0;
}