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

动态规划算法

1. 例题讲解

1.1 内容

求arr[1,2,4,1,7,8,3]中选取若干不连续的数字的的最大和。

1.2 解题思路

1.3 动态规划的出口/初始条件

1.4 Python3 代码实现

  1. # 动态规划非递归版
  2. import numpy as np
  3. arr = [1,2,4,1,7,8,3]
  4. def dp_opt(arr):
  5. opt = np.zeros(len(arr))
  6. opt[0] = arr[0]
  7. opt[1] = max(arr[0],arr[1])
  8. for i in range(2,len(arr)):
  9. opt[i] = max(opt[i-2] + arr[i] ,opt[i-1])
  10. return opt[len(arr)-1]
  11. print(dp_opt(arr))

2.1 题目内容

从arr[3,34,4,12,5,2]中选取若干数字,判断是否存在一个和为S的序列.

2.2 解题思路

2.3 动态规划的出口/初始条件

2.4 Python3 代码实现

  1. # 动态规划非递归版
  2. import numpy as np
  3. arr = [3,34,4,12,5,2]
  4. def dp_subset(arr,S):
  5. subset = np.zeros((len(arr), S+1) ,dtype= bool)
  6. subset[:,0] = True
  7. subset[0,:] = False
  8. subset[0,arr[0]] = True
  9. for i in range(1, len(arr)):
  10. for s in range(1, S+1):
  11. if arr[i] > S:
  12. subset[i][s] = subset[i-1][s] # 不选
  13. else:
  14. A = subset[i-1, s - arr[i]]
  15. B = subset[i-1, s]
  16. subset[i][s] = A or B
  17. r,c = subset.shape
  18. return subset[r-1 , c-1]
  19. dp_subset(arr,9)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注