0

タプルを返して重みが 400 になるようにしたいのですが、繰り返しクラスがあってはなりません。

したがって、以下の最適なソリューションは次のようになります (アイテム、重量 <400、最大値、繰り返しクラスがないため、1a、1e、1g、1b)

#mytuple = (item, weight, value, class)
mytuple= (('map', 9, 150, 'a'), ('compass', 13, 35, 'a'), ('water', 153, 200, 'a'), ('sandwich', 50, 160, 'a'), ('glucose', 15, 60, 'e'), ('banana', 27, 60, 'g'), ('suntan cream', 11, 70, 'a'), ('waterproof trousers', 42, 70, 'e'), ('waterproof overclothes', 43, 75, 'a'), ('note-case', 22, 80, 'a'), ('sunglasses', 7, 20, 'b'), ('socks', 4, 50, 'a'))
4

2 に答える 2

1

タプルのタプルではなく、セットまたはディクショナリ(キーとしてクラスを持つ) の使用を検討することをお勧めします。それらは操作がはるかに簡単です。

問題自体は、コンピューター サイエンスの古典的な部分であり、インターネット上で徹底的に文書化されているナップザック問題です。

最も簡単な (ただし不正確であることが多い) ソリューションは貪欲なアルゴリズムですが、これはほぼ間違いなく宿題の問題であるため、動的プログラミングのソリューションが必要です。これは、読み取り可能な疑似コードときれいな表を備えた、非常に優れた概要です。

于 2013-10-21T23:09:11.633 に答える
0

リストから要素を削除する方法は次のとおりです。

>>> a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a.pop()  #remove & return the right-most element
3
>>> a
[1, 2]
>>> a.pop(0) #remove & return element at given index
1
>>> a
[2]

あなたの問題に関しては、それはビンパッキング問題の変種であり、NP困難です。

于 2013-10-21T23:07:16.443 に答える