本题采用递归思想:
①物品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{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int a[]=new int[n];
for(int i=0;i<n;i++)
{
a[i]=sc.nextInt();
}
System.out.println(f(0,40,n,a));
}
private static int f(int i, int sum,int n,int a[]) {
// TODO Auto-generated method stub
if(sum==0) return 1;
if(i==n||sum<0) return 0;
return f(i+1,sum-a[i],n,a)+f(i+1,sum,n,a);
}
}