Pagini recente » Cod sursa (job #2729438) | Cod sursa (job #1170573) | Cod sursa (job #18567) | Cod sursa (job #249062) | Cod sursa (job #876747)
Cod sursa(job #876747)
#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]);
if (sol != inf) printf ("%d", sol);
else printf ("-1");
return 0;
}