算法题:求数组中部分数字和为定值的方案数量

题目描述

给定一个正整数数组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])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值