Pagini recente » Cod sursa (job #956278) | Cod sursa (job #1026753) | Cod sursa (job #2434938) | Cod sursa (job #989907) | Cod sursa (job #1431048)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <set>
using namespace std;
set<int> subsequence;
int subsecventa_recursiv(int* vect, int nr, int* maxim) {
if(nr == 1) {
return 1;
} else {
int rez, end, i;
end = 1;
for(i = 1; i < nr; i++) {
rez = subsecventa_recursiv(vect, i, maxim);
if(vect[i-1] < vect[nr-1] && rez + 1 > end) {
end = end + 1;
subsequence.insert(vect[i-1]);
subsequence.insert(vect[nr-1]);
}
}
if(*maxim < end) {
*maxim = end;
}
return end;
}
}
int subsecventa_dinamica(int* vect, int nr) {
int* rez = (int*) malloc(nr*sizeof(int));
int* prev = (int*) malloc(nr*sizeof(int));
int i, j, max = 0, end;
rez[0] = 1;
prev[0] = -1;
for(i = 1; i < nr; i++) {
rez[i] = 1;
prev[i] = -1;
for(j = i-1; j >= 0; j--) {
if(vect[i] > vect[j] && rez[i] < rez[j] + 1) {
rez[i] = rez[j] + 1;
prev[i] = j;
}
}
if(rez[i] > max) {
max = rez[i];
end = i;
}
}
printf("%d\n", max);
while(end != -1) {
subsequence.insert(vect[end]);
end = prev[end];
}
free(rez);
free(prev);
return max;
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int nr, i;
int *vect;
scanf("%d", &nr);
vect = (int*) malloc(nr*sizeof(int));
for(i = 0; i < nr; i++) {
scanf("%d", &vect[i]);
}
int maxim = 1;
maxim = subsecventa_dinamica(vect, nr);
for (std::set<int>::iterator it=subsequence.begin(); it != subsequence.end(); ++it) {
printf("%d ", *it);
}
printf("\n");
return 0;
}