Python几个小的动态规划问题

本文阅读 1 分钟
首页 Python笔记 正文
  1. # 解决动态规划中的找零问题
  2. # 输入需要找零的金额和货币的币值向量
  3. # 输出满足找零条件的最少的硬币个数
  4. def ChangeMaking(coinVal, change):
  5. alist = [0]*(change+1)
  6. for i in range(1, change+1):
  7. temp = change; j = 0
  8. while j <= len(coinVal)-1 and i >= coinVal[j]:
  9. temp = min(alist[i-coinVal[j]], temp)
  10. j += 1
  11. alist[i] = temp + 1
  12. return alist.pop()
  13. print(ChangeMaking([1, 5, 10, 25], 63))
  14. # 解决动态规划中的币值最大化问题---在满足所选硬币不相邻的条件下,从一堆硬币中选择最大金额的硬币
  15. # 输入数组C[1..n]保存n个硬币的面值
  16. # 输出可选硬币的最大金额
  17. def coinRow(coinrow):
  18. alist = [0]*(len(coinrow)+1)
  19. alist[1] = coinrow[0]
  20. for i in range(2, len(coinrow)+1):
  21. alist[i] = max(coinrow[i-1]+alist[i-2], alist[i-1])
  22. return alist.pop()
  23. print(coinRow([5, 1, 2, 10, 6, 2]))
  24. # 解决0-1背包问题
  25. def maxBag(weight, value, totalWeight):
  26. if len(weight) <= 0 or len(value) <= 0 or totalWeight <= 0 or len(weight) != len(value):
  27. return
  28. num = len(weight)
  29. tempMat = []
  30. for i in range(num+1):
  31. tempMat.append([0]*(totalWeight+1))
  32. for i in range(1, num+1):
  33. for j in range(1, totalWeight+1):
  34. if j - weight[i-1] >= 0:
  35. tempMat[i][j] = max(tempMat[i-1][j], value[i-1] + tempMat[i-1][j-weight[i-1]])
  36. else:
  37. tempMat[i][j] = tempMat[i-1][j]
  38. return tempMat[-1][-1]
  39. weight, value, totalWeight = [2,1,3,2], [12,10,20,15], 5
  40. print(maxBag(weight, value, totalWeight))
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

python 英语单词拼写检查算法
« 上一篇 01-21
Python Hash及常见操作
下一篇 » 01-21

发表评论