Pagini recente » Cod sursa (job #2149308) | Cod sursa (job #3152346) | Cod sursa (job #381133) | Cod sursa (job #879888) | Cod sursa (job #2777705)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int n;
int a[5005],as[5005],as1[5005],k,dp[5005],cnt[5005];
int main()
{
fin>>n;
int i;
for(i=1; i<=n; i++)
fin>>a[i];
for(i=1; i<=n; i++)
as[i]=a[i];
sort(as+1,as+n+1);
for(i=1; i<=n; i++)
if(as[i]!=as[i-1])
as1[++k]=as[i];
for(i=1; i<=n; i++)
{
int st=1,dr=k,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(as1[mij]==a[i])
{
a[i]=mij;
break;
}
if(as1[mij]<a[i])
st=mij+1;
else
dr=mij-1;
}
}
for(i=1; i<=n; i++)
dp[i]=cnt[i]=n+1;
for(i=1; i<=n; i++)
if(a[i]==1)
dp[i]=cnt[i]=1;
for(i=1; i<=n; i++)
{
for(int j=1; j<i; j++)
{
if(a[j]==a[i]-1)
{
dp[i]=min(dp[i],dp[j]+1);
cnt[i]=min(cnt[i],cnt[j]+i-j);
}
}
}
int minim=n+1;
for(i=1; i<=n; i++)
if(a[i]==k && dp[i]==k)
minim=min(minim,cnt[i]);
fout<<minim<<"\n";
return 0;
}