记录编号 |
31905 |
评测结果 |
AAAAAAAAAA |
题目名称 |
渡轮问题 |
最终得分 |
100 |
用户昵称 |
Yeehok |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.333 s |
提交时间 |
2011-11-04 12:29:29 |
内存使用 |
0.49 MiB |
显示代码纯文本
#include<cstdio>
using namespace std;
int n,rod[15001][2],lis[15001],ans[15001]={0},tmp;
int top=-1;
int longup()
{
int i,j;
for(i=1;i<=n;i++)
{
lis[i]=1;
for(j=1;j<i;j++)
{
if(rod[i][0]>=rod[j][0]&&lis[j]+1>lis[i])
{
lis[i]=lis[j]+1;
rod[i][1]=j;
}
}
}
int maxn=0;
for(i=1;i<=n;i++)
{
if(maxn<lis[i])
{
maxn=lis[i];
tmp=i;
}
else if(maxn==lis[i])
if(lis[i]<lis[tmp])
tmp=i;
}
printf("%d\n",maxn);
return maxn;
}
void find(int x)
{
if(x>0)
{
ans[++top]=rod[x][0];
find(rod[x][1]);
}
}
int main()
{
freopen("maxxl.in","r",stdin);
freopen("maxxl.out","w",stdout);
scanf("%d\n",&n);
int i;
for(i=1;i<=n;i++)
scanf("%d\n",&rod[i]);
int a=longup();
ans[++top]=rod[tmp][0];
find(rod[tmp][1]);
for(i=top;i>=0;i--)
printf("%d ",ans[i]);
fclose(stdin);
fclose(stdout);
return (0);
}