Pagini recente » Cod sursa (job #357556) | Cod sursa (job #1570457) | Cod sursa (job #1182085) | Cod sursa (job #362491) | Cod sursa (job #702570)
Cod sursa(job #702570)
#include<cstdio>
void read(),solve(),recursiv(int);
int i,n,A[5100],dad[5100],NR[5100],DP[5100],j,MAX,MAXNR,st;
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
scanf("%d",&n);
}
void solve()
{
for(i=1;i<=n;i++)
{
scanf("%d",&A[i]);
DP[i]=1;
NR[i]=0;
for(j=i-1;j>=1;j--)
{
if(A[j]>A[i])continue;
if(DP[i]<DP[j]+1)
{
DP[i]=DP[j]+1;
NR[i]=NR[j]+A[i]-A[j];
dad[i]=j;
continue;
}
if(DP[i]==DP[j]+1)
if(NR[i]>NR[j]+A[i]-A[j])
{
NR[i]=NR[j]+A[i]-A[j];
dad[i]=j;
}
}
}
for(i=1;i<=n;i++)
{
if(DP[i]>MAX)
{
MAX=DP[i];
MAXNR=NR[i];
st=i;
continue;
}
if(DP[i]==MAX&&MAXNR>NR[i])
{
MAXNR=NR[i];
st=i;
}
}
recursiv(st);
}
void recursiv(int X)
{
if(dad[X])recursiv(dad[X]);
printf("%d ",X);
}