记录编号 219517 评测结果 AAAAAAAAAA
题目名称 渡轮问题 最终得分 100
用户昵称 Gravatar陈飞帆说我是他儿子真是可笑呢 是否通过 通过
代码语言 C++ 运行时间 0.195 s
提交时间 2016-01-14 19:47:09 内存使用 0.39 MiB
显示代码纯文本
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
int n;const int maxn=10000;
int INF=1000000; 
bool lpx;
int a[maxn];
int d[maxn];
int maxe;
vector<int> s;
void p(int i)
{
	s.push_back(a[i]);
	for(int j=0;j<n;j++)
		{
		if(d[i]==d[j]+1&&a[i]>=a[j]) {
		p(j);break;}
	}
}
int main()
{
	freopen("maxxl.in","r",stdin);
	freopen("maxxl.out","w",stdout);
	
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>a[i]; 
	int e=a[0];
	for(int i=0;i<n;i++)
		{if(a[i]==a[0]) lpx=1;
		else lpx=0;
		if(!lpx) break;
	}
	if(lpx)  {
		cout<<n<<endl;
		for(int i=0;i<n;i++)
		 cout<<a[i]<<" ";
		 return 0;
	}
	for(int i=0;i<n;i++)
		d[i]=1;
	for(int i=1;i<n;i++)
		for(int j=0;j<i;j++)
		if(a[i]>=a[j]&&d[i]<d[j]+1) {
		d[i]=d[j]+1;
	}
	for(int i=0;i<n;i++)
		if(d[i]>maxe) maxe =d[i];
	
	/*for(int i=0;i<n;i++)
	{
		int k=lower_bound(g+1,g+n+1,a[i])-g;
		d[i]=k;
		g[k]=a[i];
		if(d[i]>maxe)  maxe=d[i]; 
	}*/
	
cout<<maxe<<endl;
for(int i=0;i<n;i++)
	if(d[i]==maxe) {p(i);break;
	}
for(int i=s.size()-1;i>=0;i--)
	cout<<s[i]<<" ";
	
	return 0;
}