【搜索】激光样式
标题:激光样式
x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱。
安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开!
国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激光效果?
显然,如果只有3台机器,一共可以成5种样式,即:
全都关上(sorry, 此时无声胜有声,这也算一种)
开一台,共3种
开两台,只1种
30台就不好算了,国王只好请你帮忙了。
要求提交一个整数,表示30台激光器能形成的样式种数。
【题解】:
搜索即可,但是注意需要一点优化设立第二个参数直接从第二个参数+2,进行操作。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int vis[34]; 4 int n,ans; 5 int t ; 6 bool check() { 7 for(int i=1;i<=t;i++){ 8 if( vis[i] && vis[i+1] ){ 9 return false; 10 } 11 } 12 return true; 13 } 14 void dfs(int step,int pos ){ 15 if( step == n && check() ){ 16 ans++; 17 return ; 18 } 19 for(int i=pos+2;i<=t;i++){ 20 if( vis[i]==0 && vis[i-1] == 0 ){ 21 vis[i] = 1; 22 dfs( step+1 , i ); 23 vis[i] = 0; 24 } 25 } 26 } 27 int main() 28 { 29 scanf("%d",&t); 30 memset(vis,0,sizeof(vis)); 31 for(int i=1;i<=(t-1)/2+1;i++){ 32 n = i; 33 dfs(0,-1); 34 } 35 ans++; 36 printf("%d\n",ans); 37 }