BZOJ3791作業動的計画

このシーケンスは、十分なので、直接DP、セクションに分け$ 2K-1 $の最大値になります$ K $回を染めます見つけます 

#include <ビット/ STDC ++ H> 
に#define N 100004 
の#define setIO(S)freopenは(S ".IN"、 "R"、STDIN)
名前空間stdを使用。    
INT A [N]、F [N] [104] [2]。        
INTのmain()
{ 
    int型N、K、I、J。
    // setIO( "入力");  
    scanf関数( "%d個の%のD"、&N&K)。         
    K = K * 2-1。      
    用(i = 1; iは= N <; ++ I)のscanf( "%dを" &A [I])。   
    int型ANS = 0、P。
    用(i = 1; iは= N <; ++ I)
    { 
        ため(J = 1; J <= K; ++ j)は
        { 
            IF([I] == 0)
            { 
                F [I] [J] [0] = MAX(F [I-1] [J-1] [1] +1、F [I-1] [j] [0] +1)。
                F [I] [j]を[1] = F [I-1]〜[J] [1]。   
                F [I] [j]を[0] = F [I-1] [j] [0]。
                F [I] [J] [1] = MAX(F [I-1] [J-1] [0] +1、F [I-1]を[J] [1] +1)。                    
            } 
            ANS = MAX(ANS、F [i]は[J] [0])。
            ANS = MAX(ANS、F [i]は[J] [1])。
        } 
    } 
    のprintf( "%d個の\ n"、ANS)。    
    0を返します。         
}

  

おすすめ

転載: www.cnblogs.com/guangheli/p/11607670.html