旅行者は町の外のホテルにn日間滞在する必要があります。彼は現金が不足しており、クレジットカードの有効期限が切れています。しかし、彼はnの金の鎖を持っていますリンクます。
このホテルのルールでは、住民は毎朝家賃を支払う必要があります。旅行者は、マネージャーとの間でゴールデンチェーンのリンクを毎日支払うことに同意します。しかし、マネージャーはまた、旅行者が毎日支払いながらチェーンに可能な限り損害を与えないように要求しています。言い換えれば、彼はできるだけ少ないリンクをカットする解決策を考え出さなければなりません。
リンクを切断すると、3つのサブチェーンが作成されます。1つは切断されたリンクのみを含み、もう1つは両側にあります。たとえば、長さ8のチェーンの3番目のリンクを切断すると、長さ[2、1、5]のサブチェーンが作成されます。マネージャーは変更を喜んで行うため、旅行者は長さ1のチェーンで1日目を支払い、次に長さ2のチェーンで2日目を支払い、最初のチェーンを取り戻すことができます。
コードは長さnを入力する必要があります最小長のカットへのリンクのリストを出力する必要があります。
ルール:
- nは0より大きい整数です。
- リンクには0ベースまたは1ベースのインデックスを使用できます。
- 一部の数値では、ソリューションは一意ではありません。たとえば、
n = 15
両方[3, 8]
と[4, 8]
有効な出力です。 - リストを返すか、適切な区切り記号を付けて印刷できます。
- これはcode-golfであるため、バイト単位の最短コードが優先されます。
テストケース:
Input Output (1-indexed)
1 []
3 [1]
7 [3]
15 [3, 8]
149 [6, 17, 38, 79]
詳細な例
以下のためのN = 15、リンク3及び長さのサブチェーンで8つの結果を切断します[2, 1, 4, 1, 7]
。これは有効なソリューションです:
1 = 1
2 = 2
3 = 1+2
4 = 4
5 = 1+4
6 = 2+4
7 = 7
8 = 1+7
9 = 2+7
10 = 1+2+7
11 = 4+7
12 = 1+4+7
13 = 2+4+7
14 = 1+2+4+7
15 = 1+1+2+4+7
カットが1つしかないソリューションは存在しないため、これが最適なソリューションです。
補遺
この問題は整数分割に関連していることに注意してください。1からnまでのすべての整数がPのサブセットである少なくとも1つのパーティションを持つようなnのパーティションPを探しています。。
ここだYouTubeの動画この問題の一つの可能なアルゴリズムについては。
1+2
。2番目の2リンクチェーンはどこから来たのですか?