Cod sursa(job #2908992)

Utilizator Shapka-NevedimkaSemenenco Stanislav Shapka-Nevedimka Data 7 iunie 2022 18:19:43
Problema Subsir crescator maximal Scor 0
Compilator c-32 Status done
Runda Arhiva educationala Marime 2.15 kb
/*
    Maximum Increasing Subarray Problem
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define  _CRT_SECURE_NO_WARNINGS

void maxIncrSubArr(int* arr, int* dp, int* poz,int n)
{
    FILE* g;
    g = fopen("scmax.out", "wt");
	int i, j, maxSum, bgn = n;
	dp[0] = 1;
	maxSum = 1;
	for (i = n-1; i >= 1; i--)
	{
		dp[i] = 1;
		poz[i]=-1;
		for(j=i+1;j<=n;j++)
		{
			if (arr[i] < arr[n]&&dp[i] < dp[j]+1)
			{
				dp[i] = dp[i] + 1;
				poz[i] = j;
				if (maxSum < dp[i])
				{
					maxSum = dp[i];
					bgn=i;            
				}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    			}
		}
	}
    fprintf(g,"%d\n", maxSum);
	i=bgn;
	while (i!=-1)
	{
		fprintf(g,"%d ", arr[i]);
		i = poz[i];
	}
}

int main()
{
    int n,i;
    int *arr,*dp,*poz;
    
    FILE* f;
    f = fopen("scmax.in", "rt");

    fscanf(f,"%d",&n);

    arr = (int*) calloc(n+1,sizeof(int));
    for (i = 1; i < n; i++)
    {
        fscanf(f,"%d", arr + i);
    }
    dp  = (int*) calloc(n+1,sizeof(int));
    poz  = (int*) calloc(n+1,sizeof(int));

	maxIncrSubArr(arr, dp, poz, n);
    return 0;
}