Cod sursa(job #678265)

Utilizator CBogdanCiobanu Bogdan CBogdan Data 11 februarie 2012 12:44:39
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<cstdio>
#include<algorithm>
using namespace std;

int n,m,i,j,best=1<<30,V[5010],unic[5010],elem[5010],S[5010][5010];

void read(),solve();

int main()
{
	read();
	solve();
	return 0;
}

void read()
{
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&V[i]);
		unic[i]=V[i];
	}
	sort(unic+1,unic+n+1);
	for(i=1;i<=n;i++)
	{
		for(;unic[i]==unic[i+1];i++);
		elem[++m]=unic[i];
	}
}

void solve()
{
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(V[i]==elem[j])
			{
				if(j==1){S[i][j]=1;continue;}
				if(S[i-1][j-1])S[i][j]=S[i-1][j-1]+1;
			}
			if(S[i-1][j]&&S[i][j])S[i][j]=min(S[i][j],S[i-1][j]+1);
			else if(S[i-1][j])S[i][j]=S[i-1][j]+1;
		}
		if(S[i][m]&&best>S[i][m])best=S[i][m];
	}
	if(best==1<<30)best=-1;
	printf("%d\n",best);
}