zoukankan      html  css  js  c++  java
  • 蓝桥-【算法1-3】暴力枚举

    前言

    本来以为可以纯暴力解决这一类题目,没想到还混杂了大量的dp..花了几天断断续续的写完了。。

    P2241 统计方形(数据加强版)

    import java.util.Scanner;
    
    
    
    public class Test01 {
    
        public static void main(String[] args) {
    
            Scanner <u>scanner</u> = new Scanner(System.in);
    
            long m = scanner.nextLong(), n = scanner.nextLong();//这里必须定义long防止溢出
    
            
    
            long rectangle = (m*(m+1)/2)*(n*(n+1)/2), square = 0;//所有的四边形
    
            for (long i = 1; i <= Math.min(m, n); i++) {
    
                square += (n-i+1)*(m-i+1);//而对于一个边长为 i (1 ≤ i ≤ <u>min</u>{n, m}) 的正方形,数量为:(n-i+1)(m-i+1)
    
            }
    
            System.out.println(square + " " + (rectangle-square));
    
        }
    
    }
    

    烤鸡

    import java.util.Scanner;
    
    
    
    public class Test02 {
    
           public static void main(String[] args) {
    
                  Scanner scanner = new Scanner(System.in);
    
                  int n = scanner.nextInt();
    
                  int count = 0;
    
                  
    
                  int a,b,c,d,e,f,g,h,i,j;
    
                  for (a = 1; a <= 3; a++) {
    
                         for (b = 1; b <= 3; b++) {
    
                               for (c = 1; c <= 3; c++) {
    
                                      for (d = 1; d <= 3; d++) {
    
                                             for (e = 1; e <= 3; e++) {
    
                                                    for (f = 1; f <= 3; f++) {
    
                                                           for (g = 1; g <= 3; g++) {
    
                                                                  for (h = 1; h <= 3; 
    h++) {
    
                                                                         for (i = 1; i 
    <= 3; i++) {
    
                                                                               for (j 
    = 1; j <= 3; j++) {
    
                                                                                      if(a+b+c+d+e+f+g+h+i+j==n) {
    
                                                                                             count++;
    
                                                                                      }
    
                                                                               }
    
                                                                         }
    
                                                                  }
    
                                                           }
    
                                                    }
    
                                             }
    
                                      }
    
                               }
    
                         }
    
                  }
    
                  
    
                  System.out.println(count);
    
                  for (a = 1; a <= 3; a++) {
    
                         for (b = 1; b <= 3; b++) {
    
                               for (c = 1; c <= 3; c++) {
    
                                      for (d = 1; d <= 3; d++) {
    
                                             for (e = 1; e <= 3; e++) {
    
                                                    for (f = 1; f <= 3; f++) {
    
                                                           for (g = 1; g <= 3; g++) {
    
                                                                  for (h = 1; h <= 3; 
    h++) {
    
                                                                         for (i = 1; i 
    <= 3; i++) {
    
                                                                               for (j 
    = 1; j <= 3; j++) {
    
                                                                                      if(a+b+c+d+e+f+g+h+i+j==n) {
    
                                                                                             System.out.println(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h+" "+i+" 
    "+j);
    
                                                                                      }
    
                                                                               }
    
                                                                         }
    
                                                                  }
    
                                                           }
    
                                                    }
    
                                             }
    
                                      }
    
                               }
    
                         }
    
                  }
    
                  
    
                  scanner.close();
    
           }
    
    
    
    }
    

    P1618 三连击(升级版)

    
    
    import java.util.Scanner;
    
    public class Test03 {
    
    
    
        public static void main(String[] args) {
    
            Scanner <u>sc</u>=new Scanner(System.in);
    
    
    
            int m1=sc.nextInt();
    
            int m2=sc.nextInt();
    
            int m3=sc.nextInt();
    
    
    
    
    
            int f=0;
    
    
    
            for(int a=123;a<999;a++){
    
                int b=a/m1*m2;
    
                int c=a/m1*m3;
    
                if(b>=999||c>=999)break;
    
                String a1=String.valueOf(a);
    
                String b1=String.valueOf(b);
    
                String c1=String.valueOf(c);
    
    
    
                if(a>b||a>c||b>c)break;
    
                if(pd(a1,b1,c1)){
    
                    if(hj(a,b,c).equals(hj(m1,m2,m3))){
    
                        f=1;
    
                        System.out.println(a+" "+b+" "+c);
    
                    }
    
                }
    
    
    
            }
    
            if(f==0){
    
                System.out.println("No!!!");
    
            }
    
    
    
        }
    
    
    
        private static String hj(int a, int b, int c) {
    
            // TODO Auto-generated method stub
    
            for(int i=a;i>=2;i--){
    
                if(a%i==0&&b%i==0&&c%i==0){
    
                    a=a/i;
    
                    b=b/i;
    
                    c=c/i;
    
                }
    
            }
    
            return String.valueOf(a)+String.valueOf(b)+String.valueOf(c);
    
        }
    
    
    
        private static boolean pd(String a1, String b1, String c1) {
    
            // TODO Auto-generated method stub
    
            String s=a1+b1+c1;
    
    
    
            for(char i='1';i<='9';i++){
    
                if(s.contains(String.valueOf(i))==false){
    
                    return false;
    
                }
    
            }
    
            return true;
    
        }
    
    
    
    }
    

    P1036 [NOIP2002 普及组] 选数

    
    import java.util.*;
    
     
    
    public class Test04 {
    
     
    
        public static int n,k;
    
        public static int res;
    
        public static int[] a;
    
     
    
        public static boolean judge(int num){
    
            for(int i=2;i<=Math.sqrt(num);i++){
    
                if(num%i==0)
    
                    return false;
    
            }
    
            return true;
    
        }
    
     
    
        public static void dfs(ArrayList<Integer> arr,int cur){
    
            if(arr.size() == k){
    
                int sum = 0;
    
                for(int i=0;i<arr.size();i++)
    
                    sum += arr.get(i);
    
                if(judge(sum))
    
                    res++;
    
                return;
    
            }
    
            if(cur == n) return;
    
            for(int i=cur;i<n;i++){
    
                arr.add(a[i]);
    
                dfs(arr,i+1);
    
                arr.remove(arr.size()-1);
    
            }
    
     
    
        }
    
     
    
        public static void main(String[] args){
    
            Scanner <u>sc</u> = new Scanner(System.in);
    
            n = sc.nextInt();
    
            k = sc.nextInt();
    
            a = new int[n];
    
            for(int i=0;i<n;i++)
    
                a[i] = sc.nextInt();
    
            res = 0;
    
            ArrayList<Integer> arr = new ArrayList<>();
    
            for(int i=0;i<n;i++){
    
                arr.add(a[i]);
    
                dfs(arr,i+1);
    
                arr.remove(arr.size()-1);
    
            }
    
            System.out.println(res);
    
     
    
        }
    
    }
    

    全排列问题

    import java.util.Scanner;
    
    
    
    public class Test06 {
    
    
    
        public static StringBuilder result = new StringBuilder();//使用append操作
    
    
    
        public static int num;
    
    
    
        public static int[] ans;//保存当前的方案
    
    
    
        public static boolean[] used;////表示每个数是否被用过
    
    
    
        public static void dfs(int k) {
    
            if (k > num) {
    
                for (int j = 1; j <= num; j++) {
    
                    result.append("    ").append(ans[j]);//使用空格来控制场宽
    
                }
    
                result.append('
    ');//换行
    
                return;
    
            }
    
            for (int i = 1; i <= num; i++) {//从小到大枚举
    
                if (!used[i]) {//判断这个数是否用过
    
                    used[i] = true;//标记这个数被使用了
    
                    ans[k] = i;////保存到方案中
    
                    dfs(k+1);//进行下一步搜索
    
                    used[i] = false;////撤销标记回溯
    
                }
    
            }
    
        }
    
    
    
        public static void main(String[] args) {
    
            Scanner scanner = new Scanner(System.in);
    
            num = scanner.nextInt();
    
            scanner.close();
    
            ans = new int[num+1];//从1开始
    
            used = new boolean[num+1];
    
            dfs(1);
    
            System.out.print(result);
    
        }
    
    
    
    }
    

    涂国旗

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            String[] line1 = reader.readLine().split("\s+");
            int n = Integer.parseInt(line1[0]), m = Integer.parseInt(line1[1]);
            char[][] graph = new char[n][m];
            for (int i = 0; i < n; i++) {
                char[] read_temp = reader.readLine().toCharArray();
                for (int j = 0; j < m; j++) {
                    graph[i][j] = read_temp[j];
                }
            }
            reader.close();
            int min_result = 0x7fffffff, temp_result = 0;
            //确定白行数
            for (int i = 0; i < n-2; i++) {
                //确定蓝行数
                for (int j = i+1; j < n-1; j++) {
                    //循环白
                    for (int k = 0; k <= i; k++) {
                       for (int p = 0; p < m; p++) {
                         if (graph[k][p] != 'W') {
                              temp_result++;
                            }
                        }
                    }
                    //循环蓝
                    for (int k = i+1; k <= j; k++) {
                        for (int p = 0; p < m; p++) {
                            if (graph[k][p] != 'B') {
                                temp_result++;
                            }
                        }
                    }
                    //循环红
                    for (int k = j+1; k < n; k++) {
                        for (int p = 0; p < m; p++) {
                            if (graph[k][p] != 'R') {
                                temp_result++;
                            }
                        }
                    }
                    if (temp_result < min_result) {
                        min_result = temp_result;
                    }
                    temp_result = 0;
                }
            }
            System.out.println(min_result);
        }
    }
    
  • 相关阅读:
    deflate树与deflate编码
    生产者消费者模式下的并发无锁环形缓冲区
    环形缓冲区的设计及其在生产者消费者模式下的使用(并发有锁环形队列)
    zeromq源码分析笔记之无锁队列ypipe_t(3)
    zeromq源码分析笔记之线程间收发命令(2)
    zeromq源码分析笔记之架构(1)
    PHP和golang差异见解
    关于助力红包随机分配思考总结
    TCP四次挥手
    TCP三次握手
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/14370015.html
Copyright © 2011-2022 走看看