CodeForces - 1256C(+貪欲思考)

問題の意味

https://vjudge.net/problem/CodeForces-1256C

それは、幅があるn個の川を。川の左岸には番号が付けられ、右バンク番号で、0をあるN- + 1。河川上及び木製のプラットフォームで、M I のプラットフォームの長さC のI(i番目のプラットフォームは河川占めるようにC I連続位置)。ない以上n以下のことを確認するためのプラットフォームの長さの合計。

あなたは立っている0 (左バンク)、などすなわち右岸に到達するためのn + 1つの位置。あなたが位置xに立つ場合は、省略することができ、[ X + 1、X + D ]の範囲内の任意の位置に配置されています。しかし、あなただけの木製のプラットフォーム(上ジャンプすることができ  、すなわち、ない水  )。たとえば、Dは= 。1(この位置で木製のプラットフォームがある場合)にのみ、次の位置にジャンプ。あなたは、細胞想定することができ、0〜N- +を。1は、木製のプラットフォームに属します。

あなたはとても長い間、彼らは互いに重なり合う(しかし側の2つのプラットフォーム側)していないとして、任意の回数(移動することはできません)に移動し、左または右に任意のプラットフォームを使用することができます。ことを意味しますが、プラットフォームの相対的な順序を変更することはできません。

(あなたは、もはや、あなたが起動したら、モバイルプラットフォームをすることができます)あなたが最初のモバイルプラットフォーム、次にジャンプする必要があることに注意していないしてください。

例えば、N- = 7、M = 3、D = 2、C = [ 1 2 。1 1]、それは方法の左岸から右バンクにジャンプ。

思考

私はタイトルの間違った、ピットの父を読み始めました。各ボードの順序を変更することはできませんし、各ボードを過ごすために持っていることに注意してください。私たちの第一の目標は、n + 1、その貪欲ハートビートの手順dに到達することですが、我々はそのボードの長さの現在位置が+ D +、その後、放電し、-1 <= nでない場合は、ボードを置くために十分なスペースを残して検討する必要がありますので我々は、現在の位置+ Dにジャンプし、そうでなければ、N-放電ボードの長さと+1、位置に基板を配置する各ジャンプ、N + 1にジャンプするかどうかを最終的な決意をスキップしません。

コード

#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
#define INF 0x3f3f3f3f 
の#define LL長い長い
のconst int型N = 2005; 
const int型MOD = 1E9 + 7。
constのダブルEPS = 1E-8; 
constのダブルPI = ACOS(-1.0); 
#define lowbit(X)(X&( - X))
INTのmain()
{ 
    のstd :: IOS :: sync_with_stdio(偽)。
    整数N、M、D。
    一方、(CIN >> N >> M >> D)
    { 
        INT [N]、W、和= 0。
        以下のために(INT I 1 =; I <= M; I ++)
        { 
            CIN >> W [i]は、
            和+ = W [i]は、
        } 
        int型、S = 0、T = 1。
        INT ANS [N]。
        memset(ANS、0、はsizeof(ANS))。
        INTフラグ= 0。
        一方、(S <= N) 
        { 
            // COUT << "S:" << S << ENDL。

            IF(S + Dを+和-1 <= N)
                、S + = D。
            { 
                S = N-和+ 1。
            } 
            もし、(S> = N + 1)
            { 
                ブレーク。
            } 
            // COUT << S << ENDL。
            もし(T <= M)
            { 
                ため(INT I = S; [t]はW I <S +、I ++)
                { 
                    ANS [I] = T。
                } 
                、S = S + [T] W -1。
                sum- = [T] W。
                トン++;
            そうでなければ
                フラグ= 1。
                ブレーク; 
            } 
        } 
        もし(フラグ)
        { 
            COUT << "NO" << ENDL。
        } 
        { 
            COUT << "YES" << ENDL。
            以下のために(INT I 1 =; I <= N; I ++)
            { 
                COUT << ANS [I] <<」「。
            } 
            COUT << ENDL。
        } 
    } 
    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/mcq1999/p/11848317.html