羅区$ P4040 \ [AHOI2014 / JSOI2014] $オタク計画貪欲

ポジティブなソリューション:貪欲

レポートの問題解決:

ポータル$ QwQ $

実際には、長い受験上の冬休みは、渡された前,,,が、その後$ GQL $適切に実装されていない、半分だけを書いた、3点のない二分法のセットは存在しないだろう、私はたったの$ 70pts $を得ました

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#defineは長い長いっ
 の#defineのRP(I、x、y)は(; iは<= Y; LL I = xをレジスタ++ I)
 #defineする(LL I = Xを登録するための私の(I、x、y)を、 I> = Y; - I)CONST LL N = 10000 + 10 
LLのM、F、N、P [N]、S [N]、MNV [N * 200 ]、MXS、ANS、和[N * 200 ]。
インライン()読み取りちゃう
{ チャー CH = GETCHAR(); LL、X = 0BOOL Y = 1 しばらく(CH =!' - ' &&(CH> ' 9 '



    || CH < ' 0 '))CH = GETCHAR()。
    もし(CH == ' - ')CH = GETCHAR()、Y = 0 一方、(CH> = ' 0 ' && CH <= ' 9 ')X =(X << 1)+(X << 3)+(CH ^ ' 0 ')、CH = GETCHAR()。
    返す yはX: - ?X; 
} 
ボイドFD(LLのV、LLのTOT)
{ 
    LLのL = 0、R = MXS。
    一方、(L < R)
    {
        INT半ば=(L + R + 1)>> 1 もし((LL)の和[中間] * TOT <=(LL)V)L = ミッド。
        他に、R =半ば1 
    } 
    ANS = MAX((LL)ANS、+(V-和[L] * TOT)/ MNVのL * TOT [L + 1 ])。
} 
ボイドワーク()
{ 
    ため(登録LL I = F、TOT = 1 ; I <= M、I + = F、++ TOT)FD(M- I、TOT)。
    printf(" %LLDする\ n " 、ANS)。
} 

int型のmain()
{ 
//     freopenは( "food.in"、 "R"、STDIN)。
//     freopenは( "food.out"、 "W"、STDOUT)。
    M = read()は、N =; F =)(リード)(リード。
    memset(MNV、127 / 3はsizeof(MNV)); MXS = ANS = 0 
    RP(I、1、N){P [i]を読み出す=(); S [i]を読み出す=()+ 1 ; MNV [S [I] =分(MNVの[S [I]、P [I ]); MXS = MAX(S [i]は、MXS);} 
    私の(I、MXS - 11)MNV [I] =分(MNV [I + 1 ]、MNV [I]); RP(I、1、MXS)和[I] =和[I- 1 ] + MNV [I]。
    もし(Fの== 0){のprintf(" %LLDする\ n "、M / MNV [ 1 ])。リターン 0;}作業(); 
}
コードの表示

その後の$ QwQ $を完了するために、三のポインタを設定し、

または説明を書くための8人の子供は$ QwQ $上で要約審査クワインから、実際には($ QwQ $うそ

それは貯蔵寿命を持つすべての項目をとるようにまず、我々は明らかにそれを扱うことができ、単調に増加(単調波スタックは、に行くれます

その後、数回のお持ち帰りポイントを列挙し、我々はお持ち帰り料金を計算することができ、あなたは半分は日間生き延びることができます見つけることができます

それの約半数は、正しさを証明することは容易です

まず、各ラウンド日間の最適な数が接近していなければならないと結論することができます

私は下に証明する必要があります

今2つのオプションがある場合

最初のn-購入$ $第二ラウンド購入$ N + 100 $番目の最初のラウンド

第二は、最初のラウンドを購入$ N + 50 $第二ラウンド購入$ N + 50 $番目です

まず、同じでなければなりません食べるための$ n $の前に(明らかに低コスト、低貯蔵寿命を食べて、嘘を証明していない、この必要性,,,?

その$ $ 50、それは、第2及び$のいずれかでなければなりませんN $その$ $ 50 aが$の最初のラウンド後に第2のと同じであるN $番目後番目

$ 50 $より我々はそれが最初の$ n $の第二ラウンド後の$の第二ラウンドのn + $ $ 50 $ 50 1秒後に残りの部分となり比較します

私たちは、プロセスを経由してきたので、それは単調に増加する貯蔵寿命をとるように

だから、$ nを購入した後、+ 50 $ $ 50 $一定のコスト未満$ N $ $ 50 $の2ヶ月を過ごした後、

だから私たちは日の最適な数のいずれか$ T $はどちらか$ T + 1 $であることを証明することができます

だから、私たちすることができます半分の$ T $の、オー上

しかし、問題を解決するためのこの方法は$ QAQ $のロス・バレーのために生活が困難なだけで$ 70pts $($ 80pts $ポットのように、私はA $ QwQ $を書いを作ることであれば

どこの最適化を言うべき

つまり、上記の溶液を見ている、あなたは私のテイクアウェイラウンドが列挙されて最適化することができる唯一の場所を見つけるだろう

どのようにそれを最適化するには?Trichotomyを

これは、お持ち帰りが二次関数でラウンド示されており、数日間生き延びすることができます

今、私は$ QwQ $で証明するために来ます

まず、あなたがお金を稼ぐことはありませんならば、これは凸関数である。そして、お金を見つけ、凸関数の下で減算

まだ凸凸凸を保存し、これは凸関数である、第三$ QwQ $かもしれません

そして、後に$ 70pts $上記の手順で同じ辛いです!

三つのサブブランチの二組が$ LL $ $ $ kkのように破裂するので(ちなみに,,,実際に。$ QwQ $の三分の二のセットに分割されます

おすすめ

転載: www.cnblogs.com/lqsukida/p/11545128.html