问题
解题思路
dp[j]表示和为j的情况下总共可能出现的次数。
一开始没有数字和为0,所以dp[0]=1代表和为0的出现次数为1。
之后增量地考虑这些数字,即每次考虑新增一个数字的情况。设该数字为i,则当前所有dp[j]的值都需相应的加给dp[j+i]。
代码
nums=[1,14,14,4,11,7,6,9,8,10,10,5,13,2,3,15]
dp=[0]*(sum(nums)+1)
dp[0]=1
largest=0
for i in nums:
for j in range(largest,-1,-1):
dp[j+i]+=dp[j]
largest+=i
max_count=index=0
for i in range(1,len(dp)):
if dp[i]>max_count:
max_count=dp[i]
index=i
print(index,max_count)