记录编号 |
219517 |
评测结果 |
AAAAAAAAAA |
题目名称 |
渡轮问题 |
最终得分 |
100 |
用户昵称 |
陈飞帆说我是他儿子真是可笑呢 |
是否通过 |
通过 |
代码语言 |
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;
}