(NB:以下は何タラのかなり詳細な説明でありますeはそうです。コードをすでに理解していれば、この記事の残りの部分は安全にスキップすることができます)。
先ほどの例に戻って、最初のサブ長に従ってソリューションをグループ化してください。 、今
# group I
[3, 3, 3, 3, 3]
[3, 3, 3, 6]
[3, 3, 4, 5]
[3, 4, 4, 4]
[3, 5, 7]
[3, 6, 6]
# group II
[4, 4, 7]
[4, 5, 6]
# group III
[5, 5, 5]
[5, 10]
私はsublengthsを使用して、15-3 = 12のための詰め物で、3で始まるすべてが、グループ内の詰め物を比較する[3、4:あなたは、以下の3つのグループを取得します、5、6、7、10]:
In [3]: fill(15 - 3, [3, 4, 5, 6, 7, 10])
Out[3]:
[[3, 3, 3, 3],
[3, 3, 6],
[3, 4, 5],
[4, 4, 4],
[5, 7],
[6, 6]]
今、あなたは、これらすべての詰め物に3を付加した場合、あなたは正確にグループIの詰め物が
今すぐグループIIに詰め物を考え得るでしょう、これらはすべて、4で始まります。サブ長[4,5,6,7,10]を使用して、15 - 4 = 11の塗りつぶしと比較します。
In [4]: fill(15 - 4, [4, 5, 6, 7, 10])
Out[4]:
[4, 7],
[5, 6]
また、これらのすべてのフィリングに4を追加すると、グループIIのフィリングが正確に得られます。
[3,4,5,6,7,10]ではなく、上記のfill
への最後の呼び出しで[4,5,6,7,10]をサブ長として使用したのはなぜですか?これは、ますます注文が増え、4から始まるフィリングだけに興味があるからです。これは、3を含むフィリングを除外します。
最後に、グループIIIのフィリングを得るには、15 - 5 = 10、sublengths [5、6、7、10]を用いて:あなたは、サブグループの各々のための分析の同じ種類を繰り返すことができるように傾斜している場合
In [5]: fill(15 - 5, [5, 6, 7, 10])
Out[5]:
[[5, 5],
[10]]
を。たとえば、fill(15 - 3, [3, 4, 5, 6, 7, 10])
によって生成された塗りつぶしを、のの最初の要素に従ってグループ化することができます。で」
fill((15 - 3) - 3, [3, 4, 5, 6, 7, 10])
fill((15 - 3) - 4, [ 4, 5, 6, 7, 10])
fill((15 - 3) - 5, [ 5, 6, 7, 10])
fill((15 - 3) - 6, [ 6, 7, 10])
ちょうど上記の分析が行うことにより、生産フィリングに、それぞれ3、4、5、または6を、付加することで
[3, 3, 3, 3]
[3, 3, 6]
[3, 4, 5]
[4, 4, 4]
[5, 7]
[6, 6]
これらのグループ
が得られる:あなたは4つのグループを取得したいです正確に何をfill
関数が "手"を行います。 注意すべき重要な点は、すべての再帰呼び出しで問題がより簡単になることです。例えば
、fill
次の呼び出しが行わ得た[7、5、3]充填生成する過程において:
fill(15, [3, 4, 5, 6, 7, 10]) = fill(15, [3, 4, 5, 6, 7, 10])
fill(15 - 3, [3, 4, 5, 6, 7, 10]) = fill(12, [3, 4, 5, 6, 7, 10])
fill(15 - 3 - 5, [ 5, 6, 7, 10]) = fill(7, [ 5, 6, 7, 10])
注特に最後のもの、fill(7, [5, 6, 7, 10])
。その解決策を点検することができます:副長さ[5,6,7,10]から7の充填が1回だけ可能です。再帰は、これらの簡単な場合の解で終わります。究極の解決策は、これらの些細なものから組み立てられます。
あなたは*すべての*合計を取得したいですか?すべての値は正ですか? –
* "Cのような言語" * - あまり役に立ちません。私はそれがMEL(あなたがMayaを使用している場合)またはMaxScript(3DsMaxを使用している場合)のいずれかであると思います。 – UnholySheep
要素を繰り返し使用できますか? – schwobaseggl