牛牛准备参加学校组织的春游, 出发前牛牛准备往背包里装入一些零食, 牛牛的背包容量为w。
牛牛家里一共有n袋零食, 第i袋零食体积为v[i]。
牛牛想知道在总体积不超过背包容量的情况下,他一共有多少种零食放法(总体积为0也算一种放法)。
这个题笔试的时候没有写出来
import java.util.*;
public class Main{
public static int count = 1;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int nums = scanner.nextInt();
int w = scanner.nextInt();
if(nums == 0 || w == 0){
System.out.println(0);
return;
}
long[] shiwu = new long[nums];
long sum = 0;
for (int i = 0; i < nums; i++) {
shiwu[i] = scanner.nextInt();
sum += shiwu[i];
}
if(sum <= w){
System.out.println((int)Math.pow(2,nums));
return;
}
helpDfs(shiwu,w,0,0);
System.out.println(count);
}
public static void helpDfs(long[] shiwu,int total,long sum,int cur){
if(cur < shiwu.length){
if(sum > total) return;
if(sum + shiwu[cur] <= total){
count++;
helpDfs(shiwu,total,sum+shiwu[cur],cur+1);
}
helpDfs(shiwu,total,sum,cur+1);
}
}
}