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 }
  • 相关阅读:
    获取单选框的值
    HTML5本地存储详解
    设为首页和加入收藏
    用PhotoSwipe制作相册,手势可放大
    iOS 加载本地 HTML 文件 CSS 样式图片无效果
    PhotoSwipe简介
    Flexslider图片轮播、文字图片相结合滑动切换效果
    网页中插入视频的方法----腾讯、优酷为例
    webapp在Android中点击链接的时候会有淡蓝色的遮罩层
    C# 获取北京时间 (根据纪元时间(1970/1/1)转换为DateTime)
  • 原文地址:https://www.cnblogs.com/the-wang/p/8979329.html
Copyright © 2011-2022 走看看