トピックリンク
タイトル説明
伝説では、数千年前聖パトリックのアイルランドMOOすべてのヘビを排除しました。しかし、ヘビは今カムバックを作っています!ベッシー武は聖パトリックを記念して、すべてのヘビアイルランドの完全な除去を使用するように、聖パトリックの日は、3月17日、毎年です。
ベッシー捕捉するための漁網を備えた N個の 行で設定ヘビ(1 ≤ N ≤ 4 0 0)。ベッシーは、グループがこの行に表示される順番で、各グループのすべてのヘビを捕獲しなければなりません。ベッシーは蛇を終えた後、グループが逮捕されるたびに、彼女はケージに蛇をかけることになり、その後、空の漁網で次のセットをキャプチャを開始します。
サイズ S 漁網ベッシーは、任意の手段をキャッチすることができます グラム 蛇バー、グループ G ≤ 秒。しかし、ベッシーの大きさに毎回 sが 漁網用のグループキャッチ グラムの ヘビが、それは無駄の意味 S - グラムスペースを。ベッシーは、任意に漁網の初期サイズを設定することができる、と彼女は変更することができ Kの 漁網(の倍の大きさ。1 ≤ K < N)を。
スペースの合計廃棄物に到達することができヘビを捕獲するために、すべてのセットを完了した後、彼女のベッシーの最小を教えてください。
トピック分析
この質問は明らかDPです。我々は最初の特別な場合を考える - 範囲のため、漁網のサイズを設定する場合にのみ、あなたは、無駄なスペースがグループの最大数区間内の最大のグループです漁網サイズの大きさを設定する必要がありますマイナスグループと使用中のスペースの製品。その後、状況が設定されてn回は、我々はポイントの範囲の中央を列挙することができたときに、n番目のポイントの変化としてそれを作るために、戦略を変更するには、この時間は一意に上記のように決定されますが、その前に今回の変更はされています前に計算しました。
従って、Fを設定iは、jは、j番目のフロントiは上記の推論によれば、釣りネット最小無駄なスペースの大きさを変えることです
F 、I、0 = maxof(1、I)* I和(1、I)、F 、I、J =最大{FのL、J-1 + maxof(L + 1、I)*()-sum( L + 1、I)}(j≠0、J-1 <= 1 <I)。
コード
1つの#include <アルゴリズム> 2の#include <cstdioを> 3の#include <CStringの> 4 使って 名前空間STDを、 5 int型 N、K、[ 401 [F]、401 ] [ 401 ]、maxof [ 401 ] [ 401 ]、和[ 401 ]。 6 INT メイン() 7 { 8 のscanf(" %d個の%のD "、&N&K)。 9 用(int型 i = 1 ; iが<= N ++ i)が 10 { 11 scanf関数(" %のD "、および[I])。 12 和[I] =和[I- 1 ] + [I]。 13 maxof [i]は[I] = [I]を、 14 } 15 のための(int型 I = 1 ; ++; iが<= N i)が 16 のために(INT J = I + 1、J <= N; ++ j)は 17 maxof [I] [J] = MAX(maxof [ I] [J- 1 ]、[J])。 18 のmemset(F、から0x7f / 3、はsizeofのF)。 19 のために(int型 I = 1 ++; iが<= N; i)は 20 F [i]が[ 0 ] = maxof [ 1 ] [I] * I- [i]の合計。 21 のためには、(int型 i = 1 ; iは= N <; ++ I) 22 のための(INT J = 1 ; J <=分(I、K); ++ j)は 23 のために(INT L = J、L <I ; ++ L) 24 F [I] [J] =分([I] [J] F、[L] F [J- 1 ] + maxof [L + 1 ] [I] *(IL)-sum [I ] + 和[L])。 25 のprintf(" %dの"、F [N] [K])。 26 リターン 0 ; 27 }