神奇的口袋
题目详述:神奇的口袋
思路解析
递归:
①物品n个,物品体积逐一放入a[100]中
②递归函数count(i,sum)=count(i+1,sum-a[i])+count(i+1,sum);
其中,i为第i个物品,sum代表剩余空缺体积数
count(i+1,sum-a[i])
代表从第i+1个物品开始,剩余体积数为sum-a[i]的方案数
(隐含意思:已经将a[i]的体积计算进去,即包含a[i]的体积)count(i+1,sum)
代表从第i+1个物品开始,剩余体积数为sum的方案数
(隐含意思:不将a[i]的体积计算进去,即不包含a[i]的体积)
程序测试
import java.util.Scanner;
public class Main {
private static int[] array= new int[20]; // 题目上已说明(1 <= n <= 20)
private static int n;
private static int count(int i,int sum) {
if(sum==0){
return 1; //找到一组和为sum的组合数;
}
if(i==n||sum<0) {
return 0;//i==n说明没有其他的数来组合,sum<0说明组合不出;
}
return count(i+1,sum-array[i])+count(i+1,sum);
//从数组的第i为开始,包含a[i] 和 不包含a[i];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
len = sc.nextInt();
for(int i = 0; i<n; i++){
array[i] = sc.nextInt();
}
System.out.println(count(0,40));
}
}