蓝桥杯——激光样式(dfs)

x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱。
安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开!
国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激光效果?


显然,如果只有3台机器,一共可以成5种样式,即:
全都关上(sorry, 此时无声胜有声,这也算一种)
开一台,共3种
开两台,只1种


30台就不好算了,国王只好请你帮忙了。


要求提交一个整数,表示30台激光器能形成的样式种数。

注意,只提交一个整数,不要填写任何多余的内容。

答案:2178309

一开始我看30台,暴搜和全排列什么的肯定跑不出来吧,就先dfs了前边小一点的情况,发现是由规律的

类似于斐波那锲数列的规律

所以就可以直接通过前几个数,求出结果来

后来看博客,看到大佬的代码才明白,对应当前的灯有两种情况:

1.关(这时不用考虑前一个灯的情况)

2.开(这时需要保证前一个灯是关着的)

#include
using namespace std;
int ans=0;
int vis[55];
void dfs(int count){
	if(count==31){
		ans++;
		return ;
	}
	if(count>=31)
	    return ;
	dfs(count+1);//当前灯   关闭 
	if(!vis[count-1]){ //前一个灯是关闭的 
		vis[count]=1;  //当前灯  打开 
		dfs(count+1);
		vis[count]=0;  //回溯 
	}
}
int main(){
	dfs(1);
	cout<

 

你可能感兴趣的:(蓝桥杯,搜索)