Cod sursa(job #2908990)
Utilizator | Data | 7 iunie 2022 18:17:18 | |
---|---|---|---|
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, 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;
}