Pagini recente » Cod sursa (job #3251774) | Cod sursa (job #1142088) | Cod sursa (job #1904023) | Cod sursa (job #1164333) | Cod sursa (job #2209011)
/* 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;
}