私はあなたが市場でリンゴを販売することができる最高の価格を返す再帰関数を作成しました。現実世界でこの問題を説明するのははるかに簡単なので、私はバイヤーとリンゴについて説明します。再帰関数からデータを取得する方法は?
3人のバイヤーがいます。各買い手は、異なるリンゴの異なる価格を支払う意思があります。
すべての(3人の)買い手に同じ量のリンゴを販売しなければならないので、3*n
リンゴが必要です。
この関数は、可能な限り最高の売り上げを見つけます。
たとえば、apples = [[1,50,1], [1,50,1], [1,1,50]]
は、購入者が3人、リンゴが3人であることを示します。
最初のリンゴ(apples[0]
)は、1ドル、1ドル、2ドル、50ドル、3番の買い手に1ドルで売ることができます(apples[0][0]
)。
(関数が正しいである101を返し、あなたがより多くのお金を稼ぐこれらの3個のリンゴを配布することはできません)
この機能は素晴らしい作品が、それは(あなたが得るどのくらいのお金)の結果をカウントします。最大限のお金を稼ぐために、どの買い手に売る必要があるのか知りたいです。それはどこかにありますが、再帰的で再帰が最後のレベルにならないうちに、どの結果を数えなければならないかわからないので、関数からそれを取得する方法を理解できません。
apples = [[1,50,1], [1,50,1], [1,1,50]]
def sell_apples(buyer1, buyer2, buyer3):
global results
if (buyer1,buyer2,buyer3) in results.keys():
return results[(buyer1,buyer2,buyer3)]
n = sum([buyer1, buyer2, buyer3])
if buyer1 == buyer2 == buyer3 == 0 or n == 0:
return 0
os = []
for i in range(3):
buyers = [buyer1, buyer2, buyer3]
if buyers[i] > 0:
buyers[i] -= 1
os.append(sell_apples(*buyers) + apples[n - 1][i]) # here are possible parts of results
m = max(os)
results[(buyer1,buyer2,buyer3)]=m
return m
print sell_apples(1,1,1)
は101を返します。しかし、私はこのようなものを得たいと思っています:[(0,1),(1,0),(2,2)]
これは、第1のリンゴを第2のバイヤー、第2のリンゴを第1のバイヤーに販売し、第3のリンゴを第3のバイヤーに販売するときの最良の結果を意味する。
これは何とかapples[n-1][i]
から取得できますが、必要なものだけでなく、ここにすべてのオプションがあります。
何が必要なのか説明できますか?私は理解していません – Milor123
私は最良の組み合わせ(どのリンゴを購入者に売る必要があります)を知りたいです。今、この関数は最良の価格を返します。 – Lemmy
apples = [[1,50,1]、[1,50,1]、[1,80,50]] >>は110を返しますか? :S – Milor123