记录编号 |
415532 |
评测结果 |
AAAAAAAAAA |
题目名称 |
渡轮问题 |
最终得分 |
100 |
用户昵称 |
liuyu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.225 s |
提交时间 |
2017-06-17 17:21:45 |
内存使用 |
0.51 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,s[10003],f[10003],last[10003];
int next[10004],ans[10003];
int Max=0,m;
int main()
{
freopen("maxxl.in","r",stdin);
freopen("maxxl.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&s[i]);
last[i]=i; next[i]=i;
f[i]=1;
}
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(s[i]<=s[j]){
if(f[j]<=f[i]){
last[j]=i;f[j]=f[i]+1;
}
if(f[j]==f[i]+1){
if(s[last[j]]<s[i])last[j]=i;
}
}
}
}
// for(int i=1;i<=n;i++)printf("%2d ",i);printf("\n");
for(int i=1;i<=n;i++)if(f[i]>Max)Max=f[i],m=i;
printf("%d\n",Max);
stack<int>sta;
int i=m;
for(i;last[i]!=i;i=last[i])sta.push(s[i]);
sta.push(s[i]);
while(!sta.empty()){
int now=sta.top();
printf("%d ",now);
sta.pop();
}
return 0;
}