C プログラミング言語の配列のサイズは固定されており、一度指定したサイズは変更できず、縮小したり拡張したりすることもできません。
ご存知のとおり、配列は同じデータ型の要素のセットであり、連続したメモリ領域に格納されます。
値の配列 v[] とバイナリ配列 a[] が与えられた場合、目的は、各セグメントに等しい量のコインが含まれるようにしながら、できるだけ多くの k 個のコインを使用してバイナリ配列を分割することです。 0 と 1。i と j は分割セグメントの隣接するインデックスで、各分割のコストは (v[i] - v[j])2.
です。 ###問題文###例 例 1
リーリーこの削減を行うには、(8 - 9)^ 2 = 1、および 1 = 1 のコストがかかります。
例 例 2
リーリー リーリー ###説明###最初のカットは、最初と 2 番目のインデックス (4 と 7) の間で行われ、コストは (4 - 7)^2 = 9 になります。2 番目のカットは、3 番目と 4 番目のインデックス (7 と 10) の間で行われます。 (7 - 10)^ 2 = 9 のコストがかかります。現時点ではこれ以上のカットはできません。この場合に生じるバランスの取れたバイナリ部分文字列は、[1, 0]、[1, 0]、および [1, 1] です。 , 0, 0].
###アプローチ###トップダウン アプローチ、またはより一般的には動的プログラミング アプローチとして知られるアプローチを使用します。動的プログラミングの主な利点は、単純な再帰の効率が向上することです。動的プログラミングを使用すると、同じ入力への繰り返し呼び出しを伴う再帰的ソリューションを最適化できます。部分問題の結果を後で再計算することを避けるために、それらを保存するという考え方があります。この単純な最適化により、時間計算量は多項式から指数関数に軽減されます。
###アルゴリズム###ステップ 1
- 開始
ステップ 3
ステップ 4
ステップ 5
ステップ 6
を反復処理します。
ステップ 7ステップ 8
ステップ 9
ステップ 10
ステップ11
ステップ 12
例: C プログラム
同様に、コストが最大で K になるバランスの取れたバイナリ部分文字列の分割を見つけることができます。 この論文では、最大コスト K で可能な最大のバランスの取れたバイナリ部分文字列分割をプログラムに見つけさせるという課題に取り組みます。
以上が可能な最大のバランスの取れたバイナリ部分文字列の分割 (最大でも k を必要とします)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。