蓝桥杯 出栈次序

   X星球特别讲究秩序,所有道路都是单行线。一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。

    路边有个死胡同,只能容一辆车通过,是临时的检查站,如图【p1.png】所示。

    X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。

    如果车辆进入检查站和离开的次序可以任意交错。那么,该车队再次上路后,可能的次序有多少种?

    为了方便起见,假设检查站可容纳任意数量的汽车。

    显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。

    现在足足有16辆车啊,亲!需要你计算出可能次序的数目。


思路:知道卡特兰数的这题可以直接推导出来。不知道也没关系。稍微分析一下也简单。求出栈次序,无非就是问一共有多少种满足要求的排列,满足条件在本题中就是指,只有站中有“车”,才能够出来。假设1,代表进站,0代表出站,出站符合要求的就是指NUM(1)>=NUM(0)。最后生成的01排列就是总数。

#include<iostream>
using namespace std;
int num=0;

void dfs(int n,int r,int l){
	if(n==32){
		num++;
		return;
	}

		if(r>l){
			if(r<16)
			dfs(n+1,r+1,l);
			if(l<16)
			dfs(n+1,r,l+1);
		}else{
			if(r==l)
			if(r<16)
			dfs(n+1,r+1,l);
		}

	return;
}

int main(){
	
	dfs(0,0,0);
	cout<<num<<endl;
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值