Pagini recente » Cod sursa (job #186810) | Cod sursa (job #665012) | Cod sursa (job #2841103) | Cod sursa (job #2966954) | Cod sursa (job #413405)
Cod sursa(job #413405)
#include <stdio.h>
#include <stdlib.h>
int i,n;
int *vec,*sol,*best,*p;
FILE* fin,fout;
int max;
void read(char* name)
{
fin = fopen(name, "r");
fscanf(fin, "%d", &n);
vec = (int*)malloc(sizeof(int) * n);
best= (int*)malloc(sizeof(int) * n);
sol = (int*)malloc(sizeof(int) * n);
p = (int*)malloc(sizeof(int) * n);
for (i = 0 ; i < n ; i++)
{
fscanf(fin, "%d", &(vec[i]));
best[i] = 1;
sol[i] = 0;
p[i] = -1;
}
fclose(fin);
}
int solve()
{
int i,j;
max = 1;
for (j = 0 ; j < n ; j++)
for (i = j ; i < n ; i++)
if ((vec[i] > vec[j]) && best[i] <= best[j])
{
best[i] = 1 + best [j];
if (best[i] > best[max]) max = i;
p [i] = j;
}
int k = max;
int count = best[max];
while (p[k] != -1 )
{
sol[count - 1] = vec[k];
k = p[k];
count--;
}
sol[0] = vec[k];
return best[max]; // numarul de elemente
}
void write_sol(char* name, int n)
{
int i;
FILE* fout = fopen(name, "w");
fprintf(fout, "%d\n", n);
for (i = 0 ; i < n ; i++)
fprintf(fout,"%d ", sol[i]);
close(fout);
}
int main(void)
{
read("scmax.in");
write_sol("scmax.out", solve());
return 0;
}