Cod sursa(job #1791875)

Utilizator ricardinhoricardinho ricardinho Data 29 octombrie 2016 20:02:24
Problema Subsir crescator maximal Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <stdio.h>

using namespace std;

void din_me(int arr[], int n)
{
    int lis[1000], prev[1000] = {0};

    for(int i = 1; i <= n; i++)
        lis[i] = 1;

    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j < i; j++)
        {
            if(lis[j] + 1 > lis[i] && arr[j] < arr[i])
            {
                lis[i] = lis[j] + 1;
                prev[i] = j;
            }
        }
    }

    int my_max = 0;
    int index = 0;

    for(int i = 1; i <= n; i++)
        if(my_max < lis[i])
        {
            my_max = lis[i];
            index = i;
        }

    int sor[1000], d = 0;

    while(prev[index])
    {
        //cout << arr[index] << " ";
        //cout << index << " ";
        sor[d++] = arr[index];

        index = prev[index];
    }

    sor[d] = arr[index];

    freopen("scmax.out", "w", stdout);

    printf("%d\n", my_max);

    for(int i = d; i >= 0; i--)
        printf("%d ", sor[i]);

    fclose(stdout);
}

int main()
{
    int n, t[1000];
    freopen("scmax.in", "r", stdin);
    scanf("%d", &n);

    for(int i = 1; i <= n; i++)
        scanf("%d", &t[i]);

    fclose(stdin);

    din_me(t, n);

    return 0;
}