zoukankan      html  css  js  c++  java
  • 幸运的袋子(深度优先遍历)

    题目描述

    一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
    例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
    你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。

    输入描述:

    第一行输入一个正整数n(n ≤ 1000)
    第二行为n个数正整数x
    i
    (x
    i
    ≤ 1000)

    输出描述:

    输出可以产生的幸运的袋子数
    示例1

    输入

    3
    1 1 1

    输出

    2
     1 /**
     2  * 幸运的袋子
     3       1、对于a+b>a*b 必然有 一个数为1
     4  * @author Dell
     5  *
     6  */
     7 
     8 import java.util.ArrayList;
     9 import java.util.Arrays;
    10 import java.util.HashSet;
    11 import java.util.List;
    12 import java.util.Scanner;
    13 import java.util.Set;
    14 
    15 public class Main {
    16 
    17     static public int dfs(int a[], int index, long sum, long multi) {
    18         int count = 0;
    19         for (int i = index; i < a.length; i++) {
    20             sum += a[i];
    21             multi *= a[i];
    22 
    23             if (sum > multi) {// 目前幸运接着递归
    24                 count = count + 1 + dfs(a, i + 1, sum, multi);
    25             } else if (a[i] == 1) { // a[i] = 1  还有机会
    26                 count = count + dfs(a, i + 1, sum, multi);
    27             } else {// 不幸运  退出
    28                 break;
    29             }
    30 
    31             sum -= a[i];
    32             multi /= a[i];
    33             for (; i < a.length - 1 && a[i] == a[i + 1]; i++) {
    34                 // 相同号码 球取哪个 无区别 跳过
    35             }
    36         }
    37         return count;
    38     }
    39     public static void main(String[] args) {
    40         Scanner sc =new Scanner(System.in);
    41         while(sc.hasNext()) {
    42             int n = sc.nextInt();
    43             int []a = new int[n];
    44             for (int i = 0; i < a.length; i++) {
    45                 a[i] = sc.nextInt();
    46             }
    47             Arrays.sort(a);
    48             System.out.println(dfs(a,0,0,1));
    49         }
    50     }
    51 
    52 }
  • 相关阅读:
    SpringCloud------链路追踪组件Sleuth
    SpringCloud------Zuul过滤器结合谷歌Gauva现实限流
    SpringCloud------Zuul网关
    极大团(maximal clique)算法:Born_kerbosch算法
    IDEA Cannot Resolve Symbol 问题的解决方法汇总
    idea 编译项目内存溢出OutMemoryError
    java 泛型和object比较
    java log4j 打日志到控制台同时打印到不同文件
    Java通过继承外部类来建立该外部类的protected内部类的实例(转)
    C#中的委托和事件
  • 原文地址:https://www.cnblogs.com/the-wang/p/8979329.html
Copyright © 2011-2022 走看看