题目描述
给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。
当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。
输入描述:
输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000) 第二行为n个正整数A[i](32位整数),以空格隔开。
输出描述:
输出所求的方案数
示例1
输入
5 15 5 5 10 2 3
输出
4
import sys
import copy
c = []
def judge(a, t, s):
if a + t <= s and a != 0:
return True
return False
def compute(d, s, ii, t):
d1 = copy.deepcopy(d)
if s == t:
global c
c.append(d1)
#print d1
else:
for i in range(ii, len(d1)):
if judge(d1[i], t, s):
w = d1[i]
d1[i] = 0
compute(d1, s, ii + 1, t + w)
d1[i] = w
if __name__ == '__main__':
A = sys.stdin.readline().strip().split(' ')
n = int(A[0])
s = int(A[1])
d = sys.stdin.readline().strip().split(' ')
d = map(int, d)
compute(d, s, 0, 0)
cc = 0
dd = []
for i in range(0, len(c)):
if c[i] not in dd:
dd.append(c[i])
print len(dd)