Cod sursa(job #2209011)

Utilizator Horia14Horia Banciu Horia14 Data 1 iunie 2018 15:02:34
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
/* Programare dinamica - 70p */
#include<cstdio>
#define MAX_N 100000
using namespace std;

int v[MAX_N], dp[MAX_N], next[MAX_N], n;

void read() {
    FILE* fin = fopen("scmax.in","r");
    fscanf(fin,"%d",&n);
    for(int i = 0; i < n; i++)
        fscanf(fin,"%d",&v[i]);
    fclose(fin);
}

void SCM() {
    int i, j;
    dp[n-1] = 1;
    next[n-1] = -1;
    for(i = n - 2; i >= 0; i--) {
        dp[i] = 1;
        next[i] = -1;
        for(j = i + 1; j < n; j++)
            if(v[i] < v[j] && dp[i] < 1 + dp[j])
                dp[i] = 1 + dp[j], next[i] = j;
    }
}

void printSCM() {
    int i, posmax;
    FILE* fout = fopen("scmax.out","w");
    posmax = 0;
    for(i = 1; i < n; i++)
        if(dp[i] > dp[posmax])
            posmax = i;
    fprintf(fout,"%d\n",dp[posmax]);
    i = posmax;
    while(i != -1) {
        fprintf(fout,"%d ",v[i]);
        i = next[i];
    }
    fprintf(fout,"\n");
    fclose(fout);
}

int main() {
    read();
    SCM();
    printSCM();
    return 0;
}