例如:如果袋子裏面的球的號碼是{1, 1, 2, 3},這個袋子就是幸運的,因爲1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以適當從袋子裏移除一些球(可以移除0個,但是別移除完),要使移除後的袋子是幸運的。現在讓你編程計算一下你可以獲得的多少種不同的幸運的袋子。
輸入描述:
第一行輸入一個正整數n(n ≤ 1000) 第二行爲n個數正整數xi(xi ≤ 1000)
輸出描述:
輸出可以產生的幸運的袋子數
輸入例子:
3 1 1 1
輸出例子:
2
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++) a[i]=in.nextInt();
Arrays.sort(a);
System.out.println(dfs(a,0,0,1));
}
public static int dfs(int[]a, int curIndex, int sum, int product){
int count=0;
for(int i=curIndex;i<a.length;i++){
sum+=a[i]; product*=a[i];
if(sum>product) count+=1+dfs(a, i+1, sum, product);
else if(a[i]==1) count+=dfs(a, i+1, sum,product);
else break;
sum-=a[i]; product/=a[i];
for(;i<a.length-1&&a[i]==a[i+1];i++) ;
}
return count;
}
}