题目描述
给定一个正整数数组A和一个整数target,求选择数组A中部分数字和为target的方案数。
当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。
输入一行,第一个数是target,然后是数组A
输出方案数量
示例输入
3,1,1,2,2,3,3
示例输出
6
示例解释
[1,2]共计4种
[3]共计2种
所以一共6种方案
思路
动态规划
思路参考点此链接
aaa = list(map(int, input().split(',')))
target, A = aaa[0], sorted(aaa[1:])
# print(target,A)
cow = len(A)
dp = [[0]*(target+1) for _ in range(cow+1)]
dp[0] = [0] * len(dp[0]) # 初始化二维数组第0行
for row_temp in range(len(dp)): dp[row_temp][0] = 1 # 初始化二维数组第0列
#print(dp)
for i in range(cow):
for j in range(target):
dp[i + 1][j + 1] = dp[i][j + 1] + dp[i][j + 1 - A[i]] if j + 1 - A[i] >= 0 else dp[i][j + 1]
print(dp[-1][-1])
本文探讨了如何使用动态规划解决一个经典的组合问题:给定一个正整数数组A和一个整数target,求选择数组A中部分数字和为target的方案数。文章通过实例详细解析了动态规划的实现过程,包括初始化二维数组、迭代计算每一步的状态转移方程等关键步骤。
5万+

被折叠的 条评论
为什么被折叠?



