zoukankan      html  css  js  c++  java
  • java实现第七届蓝桥杯剪邮票

    剪邮票

    题目描述
    如【图1.jpg】, 有12张连在一起的12生肖的邮票。
    现在你要从中剪下5张来,要求必须是连着的。
    (仅仅连接一个角不算相连)
    比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

    请你计算,一共有多少种不同的剪取方法。

    请填写表示方案数目的整数。
    注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

    结果:116
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    import java.util.ArrayList;
    
    public class Main {
        public ArrayList<Integer> list = new ArrayList<Integer>();
        public static int[] A = {1,2,3,4,5,6,7,8,9,10,11,12};
        public static boolean[] visited = new boolean[5];
        public static long count = 0;
        
        public void dfs(int step) {
            while(step < A.length) {
                list.add(A[step]);
                if(list.size() == 5) {
                    if(check()) {
                        System.out.println(list);
                        count++;
                    }
                    
                }
                step++;
                dfs(step);
                list.remove(list.size() - 1);
            }
        }
        
        public boolean check() {
            for(int i = 0;i < 5;i++)
                visited[i] = false;
            int start = list.get(0);
            dfsPath(start, 0);
            for(int i = 0;i < 5;i++) {
                if(visited[i] == false)
                    return false;
            }
            return true;
        }
        
        public void dfsPath(int a, int i) {
            visited[i] = true;
            int start1 = a + 1;
            int start2 = a - 1;
            int start3 = a + 4;
            int start4 = a - 4;
            int r = (a - 1) / 4;
            if(list.contains(start1) && (start1 - 1) / 4 == r && !visited[list.indexOf(start1)])
                dfsPath(start1, list.indexOf(start1));
            if(list.contains(start2) && (start2 - 1) / 4 == r && !visited[list.indexOf(start2)])
                dfsPath(start2, list.indexOf(start2));
            if(list.contains(start3) && !visited[list.indexOf(start3)])
                dfsPath(start3, list.indexOf(start3));
            if(list.contains(start4) && !visited[list.indexOf(start4)])
                dfsPath(start4, list.indexOf(start4));
        }    
        
        public static void main(String[] args) {
            Main test = new Main();
            test.dfs(0);
            System.out.println(count);
        }
    }
    
  • 相关阅读:
    CF979D Kuro and GCD and XOR and SUM(01Trie)
    2020中国计量大学校赛题解
    CF16E Fish (状压dp)
    2017ccpc杭州站题解
    HDU6274 Master of Sequence(二分+预处理)
    CF899F Letters Removing(树状数组+二分)
    牛客 tokitsukaze and Soldier(优先队列+排序)
    HDU6268 Master of Subgraph(点分治)
    CF862E Mahmoud and Ehab and the function(二分)
    CF1108F MST Unification(生成树+思维)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947663.html
Copyright © 2011-2022 走看看