标签:题目 深度优先遍历 lis scan 幸运 arraylist mod break des
第一行输入一个正整数n(n ≤ 1000) 第二行为n个数正整数xi
(xi
≤ 1000)
输出可以产生的幸运的袋子数
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 }
标签:题目 深度优先遍历 lis scan 幸运 arraylist mod break des
原文地址:https://www.cnblogs.com/the-wang/p/8979329.html