2017-04-14 7 views
0

私は "1"、 "2"、 "3"、 "4"の4桁を持っています。Permutationを解決するための動的プログラミング

プログラムの入力は、上記の4桁のみを含む整数です。多くのインプットがあるでしょう。入力の

例:1123、4123、4444

Iは、次の規則に準拠し、所与の入力の順列の数を計算する必要があります

  1. どの2つの同様の数字はに隣接してはなりませんお互い。例:1223は許可されず、2123は許可されます。
  2. 開始末尾の数字は同じであってはなりません。それらは環状に隣接しているとみなされます。例:2132は使用できません。
  3. 入力が4桁の長さの場合、結果の置換も4桁の長さにする必要があります。

この問題を解決するために任意の種類のメモを使用できますか?どのように2次元配列に格納するのですか?ヒントを教えてください!

+0

入力は常に4桁の長さだけでなく、1,2,3,4桁の数字だけを含んでいますか?あなたは長さ4の例だけを与えます:1123、4123、4444はイエスを示唆していますが、ルール(3)は長さ4の入力に条件付きです。 –

答えて

1

許可されている契約の数にのみ関心があるため、ほとんどの入力は同じ結果につながります。

  • 入力の桁の順序が
  • 問題ではない数字の唯一の周波数分布は、同じ答えに、すなわち1123年と1223年のリードが重要です。桁の周波数に応じた入力を分類

は、4桁の入力に対してわずか5別の例につながる:

class  examples 
4   4444, 2222, ... 
3 1  1211, 2232, ... 
2 2  1331, 4422, ... 
2 1 1  3413, 1123, ... 
1 1 1 1 1234, 4231, ... 

あなたはそれぞれのケースのための答えを考え出したら、新たな入力が非常に高速に処理することができます。

+1

したがって、入力が最初の2つのクラスのいずれかである場合、有効な順列は0です。 「2 2」の場合、「1010」と「0101」の2つがあります。 '2 1 1'の場合は4があります。最後の場合は24です。そうです、ルックアップテーブルがあなたのためにすぐに処理します。 –

+0

はい、これは最も効率的な解決策ですが、これは進んでいる可能性があります。 4桁の数字しか使えないので、あなたは無理やり解を強制することができます。 – maraca

関連する問題