1101 火车进栈
题意
给定 1 ~ N 这 N 个整数和一个无限大的栈,每个数都要进栈并出栈一次。如果进栈的顺序为 1,2,...,N,那么可能的出栈序列有多少种?
思路
面对任何一个状态我们只有两种选择:
- 把下一个数进展
- 把当前栈顶的数出栈(如果栈非空)。
const int N=25;
int stk[N],top;
int ans[N];
int n;
int tot;
int cnt;
void dfs(int u)
{
if(u > n)
{
if(++tot > 20) exit(0);
for(int i=0;i<cnt;i++) cout<<ans[i];
for(int i=top;i;i--) cout<<stk[i];
cout<<endl;
return;
}
if(top)
{
ans[cnt++]=stk[top--];
dfs(u);
stk[++top]=ans[--cnt];
}
stk[++top]=u;
dfs(u+1);
top--;
}
int main()
{
cin>>n;
dfs(1);
//system("pause");
return 0;
}