题目描述
给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R,组装规则:
- R中元素总和加起来等于M
- R中的元素可以从N中重复选取
- R中的元素最多只能有1个不在N中,且比N中的数字都要小(不能为负数)
输入描述
第一行输入是连续数组N,采用空格分隔
第二行输入数字M
输出描述
输出的是组装办法数量,int类型
备注
- 1 ≤ M ≤ 30
- 1 ≤ N.length ≤ 1000
参考示例
示例1
输入
2
5
输出
1
示例2
输入
2 3
5
输出
2
参考代码
# 输入获取
arr = list(map(int, input().split()))
m = int(input())
def dfs(arr, index, sumV, minV, m, count):
if sumV > m:
return count
if sumV == m or 0 < m - sumV < minV:
return count + 1
for i in range(index, len(arr)):
count = dfs(arr, i, sumV + arr[i], minV, m, count)