cf1283E--貪欲

私はちょっとDIV3で行う、次のDP慣行が右感じることはありませんだと思います

最小化戦略:背面に移動皆の存在の前に入れていない、それが前に前に移動しました

現在の位置を考慮して、その後、それはフロントへの移行が付いていない、次の位置:最大値の戦略を選択します

/ * 
DP [I] [0]表示向前移动了、DP [I] [1]表示不动、DP [I] [2]表示后移
* / 
の#include <ビット/ STDC ++。H>
 使用して 名前空間STD ;
#define N 200005
 INT N、[N]、CNT [N]、[N]は、

int型のmain(){ 
    CINを >> N。
    以下のためにINT iが= 1 ; I <= N; I ++)CIN >> [i]は、CNT [I]] ++ ;
    以下のためにINT iが= 1 ; I <= N; I ++)場合(CNT [I]){
         場合(有する[I])を続けますもし(有する[I- 1 ])続けます場合(![1-有する1 ])
            有する[I + 1 ] = 1 
    }     
    
    INT TOT = 0 以下のためにINT iが= 0 ; I <= N + 1 ; I ++)TOT + = 有する[I]。
    coutの << TOT << "  " ; 
    
    memsetを(有し、0はsizeof 有します)。
    
    INTは iは= 1 ; <I = N; ++ I)の場合(CNT [I])が{
         場合(!有する[I- 1 ])CNT [I] - 、[1-有する1 ] = 1;
        もし(CNT [i])とは、{
             もし(有する[I])を有する[I + 1 ] = 1// 移到后面
            { 
                有する[I] = 1 もし(CNT [I]> 1 
                    有する[I + 1 ] = 1 
            } 
        } 
        
    } 
    TOT = 0 以下のためにINT iが= 0 ; I <= N + 1 ; I ++)TOT + = 有する[I]。
    coutの << TOT。
}

おすすめ

転載: www.cnblogs.com/zsben991126/p/12134249.html