有一个神奇的口袋, 总的容积是 40, 用这个口袋可以变出一些物品, 这些物品的总体积必须是 40John 现在有 n 个想要得到的物品, 每个物品的体积分别是 a1,a2anJohn 可以从这些物品中选择一些, 如果选出的物体的总体积是 40, 那么利用这个神奇的口袋, John 就可以得到这些物品现在的问题是, John 有多少种不同的选择物品的方式
输入描述:
输入的第一行是正整数 n (1 <= n <= 20), 表示不同的物品的数目接下来的 n 行, 每行有一个 1 到 40 之间的正整数, 分别给出 a1,a2an 的值
输出描述:
输出不同的选择物品的方式的数目
题目大意: 给 n 个数 从中挑若干个 能够凑成 40 的组合有多少个?
从讨论中 发现有个递归的思路还挺屌的 如下
对于每一个数 ai 都有取和不取得情况, 那么用递归函数 count(i,sum) sum 代表总数
对于取 ai 的情况 count(i+1,sum-ai),
对于不取 ai 的情况 count(i+1,sum)
- int count(int i, int sum){
- if(sum = 0) return 1;
- if(i>n) return 0;
- return count(i+1, sum-a[i]) + count(i+1, sum);
来源: http://www.bubuko.com/infodetail-2532549.html