记录编号 31905 评测结果 AAAAAAAAAA
题目名称 渡轮问题 最终得分 100
用户昵称 GravatarYeehok 是否通过 通过
代码语言 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);
}