Pagini recente » Cod sursa (job #1082805) | Istoria paginii runda/pnb22/clasament | Cod sursa (job #2035370) | Cod sursa (job #1365809) | Cod sursa (job #1490338)
#include <stdio.h>
#include <stdlib.h>
int *info;
int *best;
int *poz;
int *sol;
int n;
void citire()
{
int i;
FILE *f=fopen("scmax.in","r");
fscanf(f,"%d",&n);
info=(int*)malloc(n*sizeof(int));
best=(int*)malloc(n*sizeof(int));
poz=(int*)malloc(n*sizeof(int));
sol=(int*)malloc(n*sizeof(int));
for (i=0;i<n;i++)
{
fscanf(f,"%d",&info[i]);
best[i]=1;
poz[i]=-1;
}
fclose(f);
}
void rezolvare()
{
int i,j;
for (i=1;i<n;i++)
for (j=0;j<i;j++)
if (info[i]>info[j] && best[j]+1>best[i])
{
best[i]=best[j]+1;
poz[i]=j;
}
}
void afisare_subsir(int pozitie,FILE *g)
{
if (poz[pozitie]!=-1)
{
afisare_subsir(poz[pozitie],g);
fprintf(g,"%d ",info[pozitie]);
}
else
fprintf(g,"%d ",info[pozitie]);
}
void afisare()
{
FILE *g=fopen("scmax.out","w");
int i,max=0,pmax,l;
for (i=0;i<n;i++)
if (best[i]>max)
{
max=best[i];
pmax=i;
}
fprintf(g,"%d\n",max);
l=0;
while (pmax!=-1)
{
sol[l]=info[pmax];
pmax=poz[pmax];
l++;
}
for(i=l-1;i>=0;i--)
fprintf(g,"%d ",sol[i]);
//afisare_subsir(pmax,g);
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}