Cod sursa(job #1490338)

Utilizator andreeacozma95Cozma Andreea andreeacozma95 Data 23 septembrie 2015 10:54:15
Problema Subsir crescator maximal Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.47 kb
#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;
}