小さなヒープルート、最小株価を維持:これは魔法の貪欲な戦略があり、貪欲な主題です。
- 電流i日の株価は、ヒープの最上部よりも大きい場合には、違いは、答えるヒープのポップアップとトップ、2つのI日の株価を挿入するために蓄積されます。
- ヒープの最上部よりも少ない場合には、株価のi日に直接挿入します。
株式その後、株価を販売する最初のがBであれば、利益にCAを取得することができるので、株価のときC最高の売買株式の価格の面では<B <Cの価格を考えてみましょうその後、利益はB-A + CB = CAである、あなたが見ることができる、2つの方法によって得られた利益は同じであるCの販売価格は、A、Bの株価はトランジット駅に相当します。しかし、実際には、我々はBの価格で株式を購入することを選択しなかったので、私たちは二度Bを購入する必要があります。
なぜ最高の?
毎回ので、私たちは最良の選択、最低価格高価格で販売株式と同等の操作を行います。
コードを接続します。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 typedefの長い 長いLL。 4 LL [ 100005 ]、ANS。 5 int型N、CNT。 6 7 INT メイン(){ 8 ながら(scanf関数(" %のD "、&N)=!EOF){ 9 のmemset(0、はsizeof (a)参照)。 10の ANS = 0 。 11 PRIORITY_QUEUE <LL> Q。 12 のための(int型I = 1 ; I <= N; ++ I)のscanf(" %のLLD "、および[I])。 13 のために(int型 i = 1 ; iが<= N; ++ I){ 14 であれば(q.empty()|| [I] <= - q.top()) - q.push([I] ); 15 他{ 16 ANS + = A [i]が+ q.top()。 17 q.pop()。 18 q.push(-a [I]); q.push( - [I])。 19 } 20 } 21 のprintf(" ケース#1%のD:%LLDする\ n "、++ CNT、ANS)。 22 } 23 リターン 0 。 24 }