Pagini recente » Cod sursa (job #493843) | Cod sursa (job #732950) | Cod sursa (job #28314) | Cod sursa (job #1314495) | Cod sursa (job #876746)
Cod sursa(job #876746)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define maxN 5005
#define inf (1 << 30)
int A[maxN], B[maxN];
int dp[maxN];
int main()
{
freopen ("secv.in", "r", stdin);
freopen ("secv.out", "w", stdout);
int N;
scanf ("%d", &N);
for (int i = 1; i <= N; ++ i)
{
scanf ("%d", &A[i]);
bool ok = false;
for (int j = 0; j <= B[0]; ++ j)
if (A[i] == B[j])
{
ok = true;
break;
}
if (! ok) B[++ B[0]] = A[i];
}
sort (B + 1, B + B[0] + 1);
for (int i = 1; i <= N; ++ i)
{
dp[i] = inf;
if (A[i] == B[1])
{
dp[i] = 1;
continue;
}
int Last = 0;
for (int j = 1; j <= B[0]; ++ j)
if (B[j] == A[i])
{
Last = B[j - 1];
break;
}
for (int j = 1; j < i; ++ j)
if (A[j] == Last) dp[i] = min (dp[i], dp[j] + (i - j));
}
int sol = inf;
for (int i = 1; i <= N; ++ i)
if (A[i] == B[B[0]] && dp[i] != inf) sol = min (sol, dp[i]);
printf ("%d", sol);
return 0;
}