记录编号 112337 评测结果 AAAAAAAAAA
题目名称 渡轮问题 最终得分 100
用户昵称 Gravatarnoier 是否通过 通过
代码语言 C++ 运行时间 0.177 s
提交时间 2014-07-15 17:37:22 内存使用 0.54 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
int up[3][10010],down[3][10010];
int main(){
	freopen("maxxl.in","r",stdin);
	freopen("maxxl.out","w",stdout);
	int n;
	memset(up,-1,sizeof(up));
	memset(down,-1,sizeof(down));
	cin>>n;
	for (int i=0,j=n-1;i<n;i++,j--){
		int temp;
		cin>>temp;
		up[0][i]=temp;
		up[1][i]=1;
		down[0][j]=temp;
		down[1][j]=1;
	}
	for (int i=0;i<n;i++){
		for (int j=0;j<i;j++){
			if (up[0][j]<=up[0][i]&&up[1][j]+1>up[1][i]) {
				up[1][i]=up[1][j]+1;
				up[2][i]=j;
			}
		}
	}
	int max_up=0;
	int iter_up;
	for (int i=0;i<n;i++){
		if (up[1][i]>max_up) {
			max_up=up[1][i];
			iter_up=i;
		}
	}
	cout<<max_up<<endl ;
	int i;
	vector <int> ans;
		i=iter_up;
		for (i;i!=-1;i=up[2][i])
			ans.push_back(up[0][i]);
		for (vector <int>::iterator iter=ans.end()-1;iter>=ans.begin();iter--)
			cout<<*iter<<" ";
	return 0;
}