[WQS半分||単調決定] cf321E。シエルとゴンドラ

層の状態、各意思決定プロセスとして単調

タイトル説明

効果の対象に

我々はすべて知っているように、陳の魚は非常に知的な水生動物です。しかし、彼らは半分になります土地のIQに来ました。
これはないですか?彼らは大きな問題にしています!
nは土地の上に移動するだけ陳魚、k個の車がありますレンタルすることができます。
土地に自由に歩くことができない陳魚、唯一の連続した陳魚を運ぶ車以来。
お互いの深い恨みを持っている陳の魚は、それぞれが陳の魚との不満の価値を持っています。
唯一のi番目とjの魚陳は、値のみの魚の怒りYijをと呼ばれ、Yijを= Yji、Yiiの= 0。
各車両負荷は限定されないが、それぞれが同じ車意志チョン魚の値に恨みを生成します。
もちろん、不満の和のスーパーシニア陳魚ZZPの最小値。
しかし、彼のIQが半減している、私は割り当て方式を考えることはできません。
今、彼はあなたを見つけ、あなたは彼に割り当て陳魚、と不満とANSの最小出力値を手助けする必要があります。
N <= 4000,1≤k個≤min( N、800)


 

トピック分析

実践:WQS半分

WQS半分のような一見質問、およびその答えは本当に凸関数の形状の関数です。

だから、何よりもまず、テンプレートのタイトルのWQS半分。

1の#include <ビット/ STDC ++ H>
 2のtypedef 長い LL。
3  のconst  int型 MAXN = 4035 4  CONST  INT INF = 0x3f3f3f3f 5  
6  int型N、K、L、R。
7  LL [MAXN] [MAXN]、G [MAXN] [MAXN]、F [MAXN]、H [MAXN]、ANS。
8  
9  チャー TC(){ 静的 チャー TR [ 1000000 ]、* A = TR、* B = TR。戻り ==のB &&(B =(A = TR)+関数fread(TR、11000000?* ++:、STDIN)== b)はEOF ;}
 10  の#defineをGETCHAR TC
 11  int型リード()
 12  {
 13      チャー CH = GETCHAR()。
14      INT NUM = 0、FL = 1 15      のために(; isdigit(CH)、CH =!GETCHAR())
 16          であれば(CH == ' - ')FL = - 1 17      のために(; isdigit(CH)、CH = GETCHAR())
 18          NUM =(NUM << 1)+(NUM << 3)+ CH- 48 19      リターン num個の*のFL。
20  }
21 LLチェック(INT w)の
 22  {
 23      のmemset(F、0x3f3f3f3fはsizeofのF)。
24      のmemset(H、0x3f3f3f3fはsizeofのH)。
25      F [ 0 ] = hが[ 0 ] = 0 26      のためには、int型 i = 1 ; iが<= N; I ++ 27          のためのINT J = 0 ; J <I、J ++ 28              であれば([I]> F [J] + G F [j + 1 ] [i]は+ ||(F [I] == F [J] + G [J + W 1] [I] + W && H [J] + 1 < H [I])){
 29                  のF [I] = F [J] + G [j + 1 ] [I] + H、W [I] = hの[J] + 1 30              }
 31      であれば(H [N] <= K)ANS = F [N] -k * W。
32      リターンH [n]は、
33  }
 34  のint main()の
 35  {
 36      N =(読み取り)、K = 読み取ります();
37      のためには、int型 i = 1 ; iがn = <I ++ 38          のためのINT J = 1 ; J <= nであり、j ++)[I] [J] = 読み取ります();
39      のためには、int型 I = N; I> = 1 ; i-- 40          のためのINT J = I; J <= N; J ++ 41の              G [I] [J] = G [I + 1 ] [J] + G [I] [J- 1 ] -g [I + 1 ] [J- 1 ] + [I] [J]。
42の      ANS = INF、L = 0、R = G [ 1 ] [n]は、
43      のためにINT半ば=(L + R)>> 1 ; L <= R半ば=(L + R)>> 1 44          であれば(チェック(MID)<= K)R =半ば1 45          L =ミッド+ 1 ;
46      のprintf(" %LLDする\ n " 、ANS)。
47      リターン 0 ;
48 }

練習2:単調な意思決定

$ N ^ 2 $のDPは、F $である[J] [i]は$ $ I $は最小コスト$ $のJグループにフロント魚を表します。転送に単調で、それぞれ同じ$ jは$について。それは私が層として見なさ$ $で、残りは層の間で転送されます。

一時的に書かないで。

 

終わり

おすすめ

転載: www.cnblogs.com/antiquality/p/11311625.html