P1095ライは--DPを逃げましたか?貪欲?

https://www.luogu.org/problem/P1095

悪魔ハンターIllidan野心的な、彼はナーガの海底に深くつながって、夜のエルフを裏切っ反乱を試みました。ライは典韋沙の大きな不毛の島に閉じ込められたとの衝突を受けました。ライを殺すためには、ディアンは、この島に呪文を唱えるようになった、島はすぐに沈んでしまいます。

その時まで、誰もが島に殺されます。無人島を脱出することはできません、このような速度で17メートル/秒のライ走行速度、。幸いライは、60メートルの1秒以内に移動することができ、魔法の点滅を持っていますが、呪文を点滅するたびにマナ10時を消費します。午前4時/秒の魔法の値ライ回復速度、

静止状態を復元するために、代わりにのみ。

ライ魔法は現在、時間Tをシンク初期値M、初期位置との間の距離を知られており、彼はS島を出て、島 あなたの仕事は逃れられない場合は、残りの時間で出力キャッチャーは最も遠い距離を移動することができ、最短時間で無人島キャッチャーから脱出する方法を見つけ出す手助けするプログラムを書くことです。

注:ライランニング、フリッカや破壊活動単位として秒(s)であり、各活動の継続期間は、整数秒です。メートル単位の距離(M)。

 

スペースM、Sにより分離された3つの負でない整数を含む総ライン、T.

 

出力フォーマットは、
2行の合計。

文字列の最初の行為は、「はい」または「いいえ」(大文字と小文字を区別)、ライ島を逃げるすなわちかどうか。

第二行は整数を含んでいます。最初の行は、「はい」(大文字と小文字を区別)最短時間をエスケープするライ島を表し、最初の行に「いいえ」と(大文字と小文字を区別)、ライが最も遠い距離を移動することができ表します。

 

この質問は、小さなバーDPと貪欲、複数の次元であると考えられますが、十分な一次元を持っています。

私たちは、あなたが、これが最善である、魔法と魔法を使うことができ、最速の脱出を知りたいが、我々はとどまるか死ぬ詳細魔法返すかどうかを検討する必要があります。

 

私たちは、時間が道路のどのくらいあるようDP [i]はiの限り行くことができます使用します

私たちは、処理魔法の散歩を分割し、唯一の魔法との最初の契約、処理中を歩きます。

私たちは、ライン上の最大値を取って、歩いたり、魔法を使用することを行くことを選択することができます。

返信魔法と時間制限なしなので、最適でなければならない魔法と魔法を使用。

私たちは、第二が1秒前に変更していない、歩いたり、魔法を使用することで変更されました。

書式#include <CStringの> 
の#include <cstdioを> 
する#include <アルゴリズム>
 使用して 名前空間はstdを、
const  int型 MAXN = 3E5 + 10 INT 、M、S、T。
int型DP [MAXN]。
INT メイン()
{ 
    scanf関数(" %D%D%D "、M&A、&S&T)。
    以下のためにint型私= 1 ; I <= T; iが++ 
    { 
        場合(M> = 10 
        { 
            DP [I] = DP [I- 1 ] + 60 
            メートル- = 10 
        } 
         
        { 
            DP [I] = DP [I- 1 ]。
            M + = 4 
        } 
    } 
    のためにint型 I = 1 ; I <= T; iは++ 
    { 
        DP [I] = MAX(DP [I- 1 ] + 17 、DP [I])。
        もし(DP [I]> = S)
        { 
            のprintf(" はいの\ n%dの" 、I)。
            リターン 0 ; 
        } 
    } 
    のprintf(" いいえの\ n%dの" 、DP [T])。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/WHFF521/p/11593511.html