@ZSCDumin
2018-09-04T13:27:08.000000Z
字数 1109
阅读 814

求arr[1,2,4,1,7,8,3]中选取若干不连续的数字的的最大和。
# 动态规划非递归版import numpy as nparr = [1,2,4,1,7,8,3]def dp_opt(arr):opt = np.zeros(len(arr))opt[0] = arr[0]opt[1] = max(arr[0],arr[1])for i in range(2,len(arr)):opt[i] = max(opt[i-2] + arr[i] ,opt[i-1])return opt[len(arr)-1]print(dp_opt(arr))
从arr[3,34,4,12,5,2]中选取若干数字,判断是否存在一个和为S的序列.
# 动态规划非递归版import numpy as nparr = [3,34,4,12,5,2]def dp_subset(arr,S):subset = np.zeros((len(arr), S+1) ,dtype= bool)subset[:,0] = Truesubset[0,:] = Falsesubset[0,arr[0]] = Truefor i in range(1, len(arr)):for s in range(1, S+1):if arr[i] > S:subset[i][s] = subset[i-1][s] # 不选else:A = subset[i-1, s - arr[i]]B = subset[i-1, s]subset[i][s] = A or Br,c = subset.shapereturn subset[r-1 , c-1]dp_subset(arr,9)