Pagini recente » Cod sursa (job #44752) | Cod sursa (job #2375906) | Cod sursa (job #1216923) | Cod sursa (job #1236211) | Cod sursa (job #1464826)
#include <cstdio>
#include <iostream>
#include <vector>
#include <set>
#include <cmath>
#include <climits>
#include <list>
#include <iomanip>
#include <cstdlib>
#include <fstream>
#include <map>
#include <algorithm>
#define nmax 10
using namespace std;
void afis (int** m, int n, int k) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++)
cout << m[i][j] << " ";
cout << "\n";
}
cout << "\n";
}
int main() {
freopen("secv.in", "r", stdin);
freopen("secv.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
int* v = new int[n + 1];
int** m = new int*[n + 1];
for (int i = 0; i <= n; i++)
m[i] = new int[n + 1];
set<int> oc;
for (int i = 1; i <= n; i++) {
cin >> v[i];
oc.insert(v[i]);
}
set<int>::iterator it;
/* for (it = oc.begin(); it != oc.end(); it++) {
cout << *it << " ";
}*/
it = oc.begin();
int nr = *it;
for (int i = 1; i <= n; i++) {
if (v[i] == nr) {
m[1][i] = 1;
} else {
m[1][i] = 0;
}
}
// afis(m, oc.size(), n);
int k = 2;
it++;
for (; it != oc.end(); it++, k++) {
bool gasit = false;
nr = *it;
for (int i = 1; i <= n; i++) {
if (v[i] == nr) {
bool aici = false;
for (int j = i - 1; j > 0; j--) {
if (m[k - 1][j] != 0) {
m[k][i] = m[k - 1][j] + i - j;
gasit = true;
aici = true;
break;
}
}
if (!aici) {
m[k][i] = 0;
}
} else {
m[k][i] = 0;
}
}
// afis(m, oc.size(), n);
if (!gasit) {
cout << -1;
break;
}
}
int ans = n;
k--;
for (int i = 1; i <= n; i++) {
if (m[k][i] < ans && m[k][i] != 0) {
ans = m[k][i];
}
}
cout << ans;
return 0;
}