Cod sursa(job #805467)

Utilizator icb_mnStf Cic icb_mn Data 31 octombrie 2012 15:37:52
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>
#define NMAX 1000
using namespace std;
int a[NMAX][NMAX], x[NMAX], n, sol[NMAX];

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out","w", stdout);

    scanf("%d", &n);

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

    for(int i = 1; i <= n; ++i)
        for(int j = i ; j <= n; ++j)
            if(x[i] <= x[j] && i < j)
                a[i][j] = a[i - 1][j - 1] + 1;
            else
                a[i][j] = (a[i - 1][j] > a[i][j - 1] ? a[i - 1][j] : a[i][j - 1]);
    sol[0] = 1;
    int ultim = 0;
    for(int i = n, j = n; i > 0;)
    {
        if(x[i] < x[j])
        {
            sol[sol[0]] = x[i];
            sol[0]++;
            ultim = x[j];
            i--;
            j--;
        }
        else
        if(a[i - 1][j] > a[i][j - 1])
            i--;
        else
            j--;
    }

    int nr_max = a[n][n];

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

    for(int i = nr_max - 1; i >= 0; --i)
        printf("%d ", sol[i]);
    printf("%d\n", ultim);

    return 0;

}