zoukankan      html  css  js  c++  java
  • 激光样式——第九届蓝桥杯C语言B组(国赛)第二题

    原创


    标题:激光样式
    x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱。
    安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开!
    国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激光效果?
    显然,如果只有3台机器,一共可以成5种样式,即:
    全都关上(sorry, 此时无声胜有声,这也算一种)
    开一台,共3种
    开两台,只1种
    30台就不好算了,国王只好请你帮忙了。
    要求提交一个整数,表示30台激光器能形成的样式种数。

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

    DFS:

    每一台机器都只有开和关两种状态,机器关闭是不需要满足任何条件的,打开机器需要判断其左右两边是否有机器打开。

    在深搜过程中,让每一台机器都尝试关闭/打开这2种状态,当深搜完最后一台时,激光样式+1,回溯。

    public class Main{
        static int arr[]=new int[32];
        
        static long total=0L;
        
        static int Judge(int value) {
            if(arr[value-1]==1 || arr[value+1]==1) {
                return 0;    //相邻的灯有灯开
            }
            return 1;
        }
        
        static void fun(int num) {
            if(num==31) {
                total++;
                return;
            }
            int i=0;
            for(i=0;i<=1;i++) {    //0表示关灯,1表示开灯
                if(i==0) {    //关灯一定可以
                    fun(num+1);
                }
                if(i==1) {    //试着开灯
                    if(Judge(num)==1) {
                        arr[num]=1;
                        fun(num+1);
                        arr[num]=0;    //回溯
                    }
                }
            }
        }
        
        public static void main(String args[]) {
            fun(1);
            System.out.println(total);
        }
        
    }

    答案:2178309

    22:56:15

    2018-06-03

  • 相关阅读:
    mysql 创建用户名及密码
    mysql 查询user 表结构
    mysql5.7 备份
    mysql 查询用户权限
    mysql 更改某表的字段长度
    centos7 搭建zabbix3.4
    关于存储过程return 和 output 获取
    jquery easyui datagrid getSelections用法
    DateTime ToString
    C#操作DateTable导入到Excel简单方法
  • 原文地址:https://www.cnblogs.com/chiweiming/p/9131087.html
Copyright © 2011-2022 走看看