Pagini recente » Profil he2623 | Cod sursa (job #1795576) | Cod sursa (job #309675) | Istoria paginii numerele-sprague-grundy | Cod sursa (job #2012421)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
struct miau{int val, poz;} x[5005];
int n,i,j,k,m=0,semn,C,eq,s,v[5005],val,d[5005][5005];
ifstream f("secv.in");
ofstream g("secv.out");
bool cmp(miau a, miau b)
{
return a.val<b.val;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>v[i];
x[i]={v[i],i};
}
sort(x+1,x+n+1,cmp);
val=x[1].val; m=1;
v[x[1].poz]=1;
for(i=2;i<=n;i++)
{
if(x[i].val==val) v[x[i].poz]=m;
else v[x[i].poz]=++m, val=x[i].val;
}
if(v[1]==1) d[1][v[1]]=1;
for(i=2;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(d[i-1][j]>0) d[i][j]=d[i-1][j]+1;
}
if(v[i]==1) d[i][v[i]]=1;
else
{
if(d[i-1][v[i]]>0 && d[i-1][v[i]-1]>0) d[i][v[i]]=min(d[i-1][v[i]]+1,d[i-1][v[i]-1]+1);
else if(d[i-1][v[i]]>0) d[i][v[i]]=d[i-1][v[i]]+1;
else if(d[i-1][v[i]-1]>0) d[i][v[i]]=d[i-1][v[i]-1]+1;
else d[i][v[i]]=0;
}
}
if(d[n][m]>0) g<<d[n][m]<<'\n';
else g<<-1<<'\n';
return 0;
}