Pagini recente » Cod sursa (job #259021) | Cod sursa (job #930351) | Cod sursa (job #3041711) | Cod sursa (job #2902761) | Cod sursa (job #805789)
Cod sursa(job #805789)
#include<cstdio>
#define NMAX 1000
using namespace std;
int a[NMAX][NMAX], x[NMAX], n, sol[NMAX];
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out","w", stdout);
scanf("%d", &n);
unsigned int el;
x[0] = 1;
for(int i = 1; i <= n; ++i)
{
bool ok = true;
scanf("%d", &el);
for(int j = 1; j < x[0]; ++j)
{
if(el == x[j])
{
ok = false;
break;
}
}
if(ok == true)
{
x[x[0]] = el;
++x[0];
}
}
n= n - (n - (x[0] - 1));
for(int i = 1; i <= n; ++i)
for(int j = 1 ; j <= n; ++j)
if(x[i] <= x[j] && i != j)
a[i][j] = a[i - 1][j - 1] + 1;
else
a[i][j] = (a[i - 1][j] > a[i][j - 1] ? a[i - 1][j] : a[i][j - 1]);
sol[0] = 1;
for(int i = n, j = n; i > 0 && j > 0;)
{
if(x[i] <= x[j] && a[i][j] != 0)
{
sol[sol[0]] = x[i];
sol[0]++;
i--;
j--;
}
else
if(a[i - 1][j] == a[i][j - 1])
i--,j--;
else
if(a[i - 1][j] < a[i][j - 1])
j--;
else
i--;
}
printf("%d\n", sol[0] - 1);
for(int i = sol[0] - 1; i > 0; --i)
printf("%d ", sol[i]);
printf("\n");
return 0;
}