天天看點

動态規劃-挖礦問題

有一個國家發現了W座金礦,每座金礦的黃金儲量不同,需要參與挖掘的勞工數也不同。參與挖礦勞工的總數是P人.每座金礦要麼全挖,要麼不挖,不能派出一半人挖取一半金礦。要求用程式求解出,要想得到盡可能多的黃金,應該選擇挖取哪幾座金礦?

#個人定義:m:金礦座數    n:勞工總數    p[]:每座礦所需要的勞工數    c[]:每座礦的的黃金數
m,n=5,10
def mining(p=[]*m,c=[]*m):
    preresult= [0] * n
    result = [0] * n
    for i in range(n):
        if i+1<p[0]:
            result[i]=0
        else:
            result[i]=c[0]

    for i in range(m):
        for j in range(n):
            if j+1<p[i]:
                result[j]=preresult[j]
            else:
                result[j]=max(preresult[j], preresult[j-p[i]+1] + c[i])

        preresult= result
    # print result
    return result[n-1]

p1=[5,5,3,4,3]
c1=[400,500,200,300,350]
print (mining(p1,c1))

p1=c1
print max(1,1+2)