かわいい、動的プログラミングは今までそれを見ましたか?
私はその後、私はそれの動的なプログラミングソリューションの素敵な問題を書いて、あなたは、動的プログラミングの非常に好きですよ。
トピック:https://www.luogu.com.cn/problem/P5774
質問の意味:
タイトルの意味での「非常に明確」。。。理由は人に感染し、ダイの数、あなたが病気を治すことができる兄の私の村の日を表し、それは村1日硬化を取り、あなたが一日の移動費やす必要があなたに、各番号のシーケンスを与えるために、頼む癒す:質問の意味少なくとも人々のすべての村が死にました。制限事項:私は、硬化前にI I-1から長い散歩のように、我々はすべての村を取る必要があります。
分析:
この問題は、そのダイナミックな計画を参照してくださいするのは簡単ですが、それ(所要時間効率のnパーティー)、暴力計画nはどのような計画3が、我々はそれを解決することはできませんが、それがになっている:単調キュー??何も単調かのように。。。私たちは、他の方法を考えることができます:半分の答えを??どのように多くの人々 、それは非常に良い裁判官の死を行うことができ、または動的プログラミングに戻ることはないようです。
列挙長は、出発点、ブレークポイント3が十分ではありません、我々は2を維持するために考えることはできませんか?
レッツは、開始と長さを列挙する:それでは、どのように我々はそれを破る列挙するために行うのですか? - 無制限:私たちは、[J] [i]をDpとを定義する私は、死亡者の最小数にj個のI jに、すべてのプロセスのための良好な硬化を表し、そして私たちはメダルすることはできませんので、道路の要件は、i乃至jにiは、ブレークポイント、そしてなぜについて:それについて考える、私は私が最終的に関係なく、無価値Dpは停止して、私はこの期間動き回るどんなにも、何の死は存在しません、すべての村の硬化後jに私を置きます変更。
そして、伝達方程式を思い付く(N-どのようにこれは派生ようになり、キーがある3が N-なり2)
DP [I] [J] = DP [I + 1]〜[J] +分((和[J] -sum [I])* 2、[I] *(D-1)* 3 +和[J ] -sum [I])。
しかし、明らかにDpの[i]の[n]は、我々は1から1へnに持っていないので、途中で戻ることができます、私たちが望む最終的な結果ではありません。
しかし、気にしない、我々は半分行っている、我々は、配列のDPを定義[i]は、元の村を硬化させた後、私、少なくとも1からn死者の数の合計を表し、あなたが見つける:長いほど、素晴らしいことだ開始点を列挙しません。その上に来るように方程式を転送します。
DP [I] =分(DP [J] + Dpの[J + 1]〜[I] +(4 *(IJ)-2)*(和[N] -sum [I]))(J属于N *、 J <I)
最後に、それは明らかDpの[n]は、我々が望むものを答えることです。
とってもキュートな動的なプログラミング、我々はそれをよりダイナミックな愛を計画していませんか?
コード:
それは非常に簡単です
書式#include <cstdioを> する#include < 文字列 > の#include <CStringの> 使用して 名前空間はstdを、 CONST INT MAXN = 3000 + 10 。 長い 長い[MAXN] [MAXN]、和、Dpは[MAXN] [MAXN]、DP [MAXN]。 int型のmain(){ int型、nは scanf関数(" %のD "、&N) 以下のために(INT iが= 1 ; I <= N; I ++ ){ scanf関数(" %のLLD "、および[I])。 合計[I] =合計[I-1 ] + [I]。 } のための(int型 D = 2 ; D <= N; D ++ ) のための(INT iは= 1、J(J = I + D- 1)<= N; I ++ ) Dpを[I] [J] = Dpの[I + 1 ] [J] +分((和[J] -sum [I])*(長い 長い)2、[I] *(長い 長い)(D- 1)*(長い 長い)3 +和[J ] - 和[I])。 memsetの(DP、0x3fを、はsizeof (DP))。 DP [ 0 ] =0 ; 以下のために(INT iが= 1 ; I <= N I ++ ) のための(INT J = 0 ; J <I、J ++ ) DPを[I] =分(DP [I]、DP [J] + Dpの[J + 1 ] [ I] +((長い 長い)4 *(長い 長い)(IJ) - (長い 長い)2)*(和[N] - 和[I]))。 printf(" %のLLD " 、DP [N])。 リターン 0 ; }
ノーコメント、お兄が一目で理解してはなりません
スロットポイント:
長い長い、あなたは私をからかっているとの死者。。。
エキス:
その他の分析は、動的プログラミングは、何度も試すことができます。一度この質問の範囲の企画、線形計画として。