动态规划 python 挖矿问题

发布时间:2019-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了动态规划 python 挖矿问题脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
#!/usr/bin/env python
# encoding: utf-8

import copy
def good(n,w,g=[],p=[]):
    # n为金矿数,w为人数,g为金矿数组,p为人数数组
    arr = [0]*w
    for i in range(w):
        if (i+1)>=p[0]:    # i为坐标, i+1为人数
            arr[i] = g[0]
    res = copy.deepcopy(arr)  #深copy
    print(res)
    # 上面为只有一个金矿的情况
    for i in range(1,n):      # 金矿数
        # 每一层代表前N个金矿人工数(1~10)人的解
        # 前一层已经求出相同人数时选取不同金矿的最大值所以可以叠加 
        for j in range(w):    # 人工数
            if (j+1)<p[i]:     # j为坐标, j+1为人数
                arr[j] = res[j]   #和上一次情况相同
            else:
                t = 0 if (j-p[i])<0 else j-p[i]    #止负数取到后面的值
                arr[j] = max(res[j],res[t]+g[i])    #挖和不挖第i座金矿比较取大
                #res[t]+g[i] 为 挖第i座金矿的情况,res[已有人数 - 第i座所需人数]+第i座金子g[i]
        res = copy.deepcopy(arr)
        print(res)
    return res.pop()
 
if __name__ == '__main__':
    res = good(5,10,[400,500,200,300,350],[5,5,3,4,3])

脚本宝典总结

以上是脚本宝典为你收集整理的动态规划 python 挖矿问题全部内容,希望文章能够帮你解决动态规划 python 挖矿问题所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。